react萌新的讀書小筆記(二)
一、引入問題
原文地址:https://blog.csdn.net/longzhutengyue/article/details/95357467
1.MySQL中慢查詢如何優化?
- 建索引,索引是一種優化查詢的資料結構
2.索引為什麼快
- 沒有索引,MySQL不得不首先以第一條記錄開始然後讀完整個表直到它找出相關的行,表越大,花費時間越多
- 使用B+tree(平衡二叉樹)的資料結構,能夠快速篩選出需要的記錄,避免全表掃描
3.為什麼使用B+tree(平衡二叉樹)的資料結構能夠實現快速篩選
- B+Tree擁有B-Tree的優點,深度淺,資料塊大
- 因為只在葉子結點儲存資料,從而導致
掃描全表的能力強
,因為葉子結點是順序的,從而導致排序功能更強
- 查詢時間相對穩定,原因1:平衡二叉樹,解決了查詢不會受到結點分佈的影響, 原因2:因為資料在葉子結點,導致每次查詢的深度是一樣的(相對於B-Tree)
二、基本簡介
1.索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)
2.索引也是一張表,該表儲存了主鍵與索引欄位,並指向實體表的記錄。即在這個列表中儲存著索引的值和包含這個值的資料所在行的實體地址,在資料十分龐大的時候,索引可以大大加快查詢的速度,這是因為使用索引後可以不用掃描全表來定位某行的資料,而是先通過索引表找到該行資料對應的實體地址然後訪問相應的資料
3.索引可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率(提高查詢速度,減慢寫入速度)
三、MYSQL中索引的語法
1.建立索引
- 在建立表時新增索引
- 在建立表後新增索引
# 在建立表後新增索引
creat index indexname on tablename(column_name)
四、索引的實現原理
- BTree索引:BTree是平衡搜尋多叉樹,設樹的度為2d(d>1),高度為h
2.B+Tree索引:B+Tree是BTree的一個變種,設d為樹的度數,h為樹的高度
五、資料庫索引
1.建表
CREAT TABLE `A` ( `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `title` varchar(30) NOT NULL, `code` varchar(30) text, `submission_date` DATE DEFAULT NULL COMMENT '下單時間', PRIMARY KEY ( `id` ), KEY `type` (`type`) , UNIQUE KEY `B` (`user_id`) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='表A';
-
ENGINE=INNODB:將資料庫的引擎設定為InnoDB(mysql中兩種資料庫引擎 :MyISAM 、InnoDB)
-
AUTO_INCREMENT=1:自動增長的起始值為1
-
DEFAULT CHARSET=utf8:設定資料庫的預設字符集為utf8
-
NOT NULL: 在操作資料庫時如果輸入該欄位的資料為NULL ,就會報錯
-
AUTO_INCREMENT:定義列為自增的屬性,一般用於主鍵,數值會自動加1
-
key:普通索引
-
PRIMARY KEY:主鍵聚集索引,用於定義列為主鍵,可以使用多列來定義主鍵,列間以逗號分隔,必須為NOT NULL
-
UNIQUE KEY:主要是用來防止資料插入的時候重複,一個表只能有一個PRIMARY KEY,但可以有多個UNIQUE KEY
解析:KEY B (user_name)
+ 本表(A)的user_name欄位與表B的user_name欄位建立外來鍵 ;
+ 括號外是建立外來鍵的對應表,括號內是對應欄位 ;
+ key未必都是外來鍵;