日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Mysql 索引該如何設計與優化

瀏覽:166日期:2023-10-05 09:46:25
什么是索引?

數據庫索引是一種數據結構,它以額外的寫入和存儲空間為代價來提高數據庫表上數據檢索操作的速度。通俗來說,索引類似于書的目錄,根據其中記錄的頁碼可以快速找到所需的內容。——維基百科常見索引有哪些?

普通索引:最基本的索引,沒有任何限制 唯一索引:與”普通索引“類似,不同的就是:索引列的值必須是唯一,但允許有空值 主鍵索引:它是一種特殊的索引,不允許有空值 全文索引:僅可用于 MyISAM 表,針對較大的數據,生成全文索引很耗時占空間 組合索引:為了提高多條件查詢效率,可建立組合索引,遵循'最左前綴匹配原則'

這里以相對復雜的組合為例,介紹如何優化。

最左前綴匹配原則

首先我們要知道什么是最左前綴匹配原則。

最左前綴匹配原則是指在使用 B+Tree 聯合索引進行數據檢索時,MySQL 優化器會讀取謂詞(過濾條件)并按照聯合索引字段創建順序一直向右匹配直到遇到范圍查詢或非等值查詢后停止匹配,此字段之后的索引列不會被使用,這時計算 key_len 可以分析出聯合索引實際使用了哪些索引列。

如何計算 key_len

通過 key_len 計算也幫助我們了解索引的最左前綴匹配原則。

key_len 表示得到結果集所使用的選擇索引的長度[字節數],不包括 order by,也就是說如果 order by 也使用了索引則 key_len 不計算在內。

在計算 key_len 之前,先來溫習一下基本數據類型(以UTF8 編碼為例):

類型 所占空間 不允許為NULL額外占用 char 一個字符三個字節 一個字節 varchar 一個字符三個字節 一個字節 int 四個字節 一個字節 tinyint 一個字節 一個字節

測試數據表如下:

CREATE TABLE `test_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NOT NULL, `b` int(11) DEFAULT NOT NULL, `c` int(11) DEFAULT NOT NULL, PRIMARY KEY (`id`), KEY `test_table_a_b_c_index` (`a`,`b`,`c`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

命中索引:

mysql> explain select * from test_table where a = 1 and b = 2 and c = 3;+----+-------------+------------+------------+------+------------------------+------------------------+---------+-------------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref| rows | filtered | Extra |+----+-------------+------------+------------+------+------------------------+------------------------+---------+-------------------+------+----------+-------------+| 1 | SIMPLE | test_table | NULL | ref | test_table_a_b_c_index | test_table_a_b_c_index | 12 | const,const,const | 1 | 100.00 | Using index |+----+-------------+------------+------------+------+------------------------+------------------------+---------+-------------------+------+----------+-------------+

可以看到 key_len = 12,這是如何計算的呢?因為字符集是 UTF8,一個字段占用四個字節,三個字段就是 4 * 3 = 12 字節。

是否允許為 NULL,如果允許為 NULL,則需要用額外的字節來標記該字段,不同的數據類型所需的字節大小不同。

mysql> ALTER TABLE `test_table` CHANGE `a` `a` INT(11) NULL;mysql> ALTER TABLE `test_table` CHANGE `c` `c` INT(11) NULL;mysql> ALTER TABLE `test_table` CHANGE `b` `b` INT(11) NULL;mysql> explain select * from test_table where a = 1 and b = 2 and c = 3;+----+-------------+------------+------------+------+------------------------+------------------------+---------+-------------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref| rows | filtered | Extra |+----+-------------+------------+------------+------+------------------------+------------------------+---------+-------------------+------+----------+-------------+| 1 | SIMPLE | test_table | NULL | ref | test_table_a_b_c_index | test_table_a_b_c_index | 15 | const,const,const | 1 | 100.00 | Using index |+----+-------------+------------+------------+------+------------------------+------------------------+---------+-------------------+------+----------+-------------+

可以看到,當字段允許為空時,這時的key_len 變成了15 = 4 3 + 1 3(INT 類型為空時,額外占用一個字節)。

索引優化

有了這些基礎知識之后,再來根據實際的SQL 判斷索性性能好壞。

還是以上面那張數據表為例,為 a、b、c 三個字段創建聯合索引。

SQL 語句 是否索引 explain select * from test_table where a = 1 and b = 2 and c = 3; Extra:Using index key_len: 15 explain select * from test_table where a = 1 and b = 2 and c = 3 order by c; Extra:Using index key_len: 15 explain select * from test_table where b = 2 and c = 3; Extra:Using where; Using index key_len: 15 explain select * from test_table where a = 1 order by c; Extra:Using where; Using index; Using filesort key_len: 5 explain select * from test_table order by a, b, c; Extra:Using index key_len: 15 explain select * from test_table order by a, b, c desc; Extra:Using index; Using filesort key_len:15 explain select * from test_table where a in (1,2) and b in (1,2,3) and c = 1; Extra:Using where; Using index key_len: 15

通常在查看執行計劃時, Extra 列為 Using index 則表示優化器使用了覆蓋索引。

SQL1 可以使用覆蓋索引,性能好 SQL2 可以使用覆蓋索引,同時避免排序,性能好 SQL3 可以使用覆蓋索引,但是需要根據 where 字句進行過濾 SQL4 可以使用部分索引 a,但無法避免排序,性能差 SQL5 可以完全使用覆蓋索引,同時可以避免排序,性能好 SQL6 可以使用覆蓋索引,但無法避免排序,(這是因為 MySQL InnoDB 創建索引時默認asc升序,索引無法自動倒序排序) SQL7 可以使用覆蓋索引,但是需要根據 where 子句進行過濾(非定值查詢) 創建索引規范 考慮到索引維護的成本,單張表的索引數量不超過 5 個,單個索引中的字段數不超過 5 個 不在低基數列上建⽴索引,例如“性別”。 在低基數列上創建的索引查詢相比全表掃描不一定有性能優勢,特別是當存在回表成本時。 合理創建聯合索引,(a,b,c) 相當于 (a) 、(a,b) 、(a,b,c)。 合理使用覆蓋索引減少IO,避免排序。

以上就是Mysql 索引該如何設計與優化的詳細內容,更多關于MySQL 索引設計與優化的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品一区三区三区在线观看| a国产在线视频| 亚洲一级在线| 国产精品二区不卡| 日韩高清二区| 伊人国产精品| 亚洲精品1区2区| 久久精品动漫| 国产精品66| 国产免费播放一区二区| 麻豆国产精品一区二区三区| 亚洲在线电影| 日韩va亚洲va欧美va久久| 天堂网在线观看国产精品| 国产伦精品一区二区三区视频| 国精品一区二区| 色一区二区三区四区| 欧美激情麻豆| 国产乱人伦精品一区| 免费看精品久久片| 日韩在线播放一区二区| 亚洲天堂成人| 国产真实久久| 黄色国产精品| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲成人va| 国产精品久久久久久久免费观看| 久久精品一区| 欧美日韩一区二区三区不卡视频| 日韩激情啪啪| 亚洲午夜久久| 深夜福利亚洲| 日韩激情啪啪| 国产探花一区二区| 麻豆成人av在线| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 鲁大师影院一区二区三区| 99精品视频在线| 在线日韩av| 免费精品视频最新在线| 国产午夜精品一区在线观看| 久久这里只有精品一区二区| 中文字幕高清在线播放| 日韩专区精品| 日韩一区精品| 亚洲最新无码中文字幕久久| 国产一区导航| 久久超碰99| 久久久成人网| 日韩二区三区在线观看| 久久麻豆视频| 亚洲一区二区免费看| 久久国产精品色av免费看| 99久久99视频只有精品| 亚洲一卡久久| 国产一区二区三区视频在线| 亚洲一区不卡| 精品国产99| 午夜在线一区二区| 国产一二在线播放| 三级在线观看一区二区 | 日韩免费小视频| 亚洲少妇诱惑| 中文字幕成在线观看| 亚洲一区二区三区四区电影| 久久久久九九精品影院| 日韩精品一级中文字幕精品视频免费观看| 91视频一区| 日本不卡高清视频| 亚洲一区不卡| 91精品亚洲| 国产一区丝袜| 久久只有精品| 久久精品99国产精品日本| 欧美精品激情| 免费不卡中文字幕在线| 在线中文字幕播放| 久久av免费| 国产图片一区| 日本a级不卡| 日韩美女精品| 日韩高清二区| 国产精品亚洲成在人线| 91成人在线网站| 国产精品免费不| 欧美有码在线| 国产日韩欧美一区| 国产亚洲人成a在线v网站| 91精品国产自产观看在线| 欧美自拍一区| 青草国产精品| 国产精品最新自拍| 你懂的国产精品永久在线| 91视频一区| 日韩二区在线观看| 99久久99视频只有精品| 日韩高清电影免费| 婷婷激情久久| 麻豆一区二区三| 日韩中文字幕一区二区三区| 欧美激情aⅴ一区二区三区| 欧美理论视频| 精品久久91| 7777精品| 亚洲一区黄色| 日韩欧美午夜| 麻豆精品少妇| 日韩一区二区三区四区五区| 国产一区二区三区四区五区传媒| 日韩高清不卡一区二区| 日韩欧美自拍| 国产精品久久久久久久久妇女| 日韩福利视频一区| 欧产日产国产精品视频| 久久国产免费看| 在线亚洲观看| 久久精品动漫| 亚洲成人av观看| 四虎国产精品免费观看| 欧美精品影院| 久久国产视频网| 日本精品在线播放| 亚洲一二av| 国产色综合网| 鲁大师成人一区二区三区| 国产91一区| 亚洲高清av| 黑丝一区二区| 免费观看在线色综合| 中文在线一区| 天堂成人免费av电影一区| 欧美片第1页综合| 国产亚洲午夜| 亚洲伦乱视频| 视频一区欧美精品| 亚洲精品影视| 中文一区一区三区免费在线观| 国产农村妇女精品一二区 | 一区二区自拍| 欧美一区二区三区激情视频 | aⅴ色国产欧美| 在线手机中文字幕| 日本а中文在线天堂| 免费一级欧美片在线观看网站| 国产精品久久久久久久久妇女| 欧美国产中文高清| 精品久久久亚洲| 欧美a级片一区| 婷婷亚洲精品| 9999国产精品| 另类亚洲自拍| 精品一区二区三区中文字幕| 日韩欧美字幕| 综合激情一区| 国产精品久久久久9999高清| 日韩欧美在线中字| 最新国产精品| 你懂的亚洲视频| 午夜久久影院| 精品美女视频 | 一区二区三区午夜视频| 日韩精品一页| 久久中文字幕二区| 国产九一精品| 免费在线欧美视频| 国产黄大片在线观看| 亚洲国产综合在线看不卡| 欧美亚洲专区| 中文久久精品| 高清av不卡| 国产麻豆精品久久| 亚洲日本在线观看视频| 激情亚洲影院在线观看| 国产日韩亚洲欧美精品| 91久久黄色| 视频小说一区二区| 精品久久中文| 国产精品欧美一区二区三区不卡| 青草久久视频| 9色国产精品| 国精品一区二区| 免费一级欧美在线观看视频| 蜜桃一区二区三区在线观看 | 国产精品一区二区精品视频观看| 亚洲欧洲日本mm| 国产不卡精品| 麻豆一区二区99久久久久| 日韩精品一区二区三区中文在线| 一区二区精品| 国产在线不卡| 婷婷中文字幕一区| 神马午夜久久| 欧美午夜精彩| 亚洲国产不卡| 午夜国产一区二区| 亚洲黄页一区| 一区二区日韩免费看| 日韩精品成人| 久久超碰99| 水蜜桃精品av一区二区|