mysql 多列索引的生效规则
生活随笔
收集整理的這篇文章主要介紹了
mysql 多列索引的生效规则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mysql中 myisam,innodb默認使用的是 Btree索引,至于btree的數據結構是怎樣的都不重要,
只需要知道結果,既然是索引那這個數據結構最后是排好序;就像新華字典他的目錄就是按照a,b,c..這樣排好序的;
所以你在找東西的時候才快,比如你找 “中” 這個字的解釋,你肯定就會定位到目錄的 z 開頭部分;
組合索引可以這樣理解,比如(a,b,c),abc都是排好序的,在任意一段a的下面b都是排好序的,任何一段b下面c都是排好序的;
只需要知道結果,既然是索引那這個數據結構最后是排好序;就像新華字典他的目錄就是按照a,b,c..這樣排好序的;
所以你在找東西的時候才快,比如你找 “中” 這個字的解釋,你肯定就會定位到目錄的 z 開頭部分;
組合索引可以這樣理解,比如(a,b,c),abc都是排好序的,在任意一段a的下面b都是排好序的,任何一段b下面c都是排好序的;
組合索引的生效原則是? 從前往后依次使用生效,如果中間某個索引沒有使用,那么斷點前面的索引部分起作用,斷點后面的索引沒有起作用;
比如
?
(a,b,c) 三個列上加了聯合索引(是聯合索引 不是在每個列上單獨加索引)
還需注意,? (a,b,c)多列索引和 (a,c,b)是不一樣的,看上面的圖也看得出來關系順序是不一樣的;
分析幾個實際例子來加強理解;
分析句子中使用的索引情況
?
補充一個:
快速生成1000W測試數據庫;
創建測試表:
create table user ( id int(10) not null auto_increment, uname varchar(20) , regtime char(30) , age int(11) ,primary key (id) ) engine=myisam default charset=utf8 collate=utf8_general_ci , auto_increment=1 ;?
編寫存儲過程:
delimiter $$ SET AUTOCOMMIT = 0$$create procedure test() begin declare v_cnt decimal (10) default 0 ; dd:loopinsert into user values(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50),(null,rand()*10,now(),rand()*50);commit;set v_cnt = v_cnt+10 ;if v_cnt = 10000000 then leave dd;end if;end loop dd ; end;$$delimiter ;?
調用存儲過程:
call test();總結
以上是生活随笔為你收集整理的mysql 多列索引的生效规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建设银行转人工服务怎么输入
- 下一篇: 修改网络配置