建立測試表:
set names utf8mb4;
set foreign_key_checks = 0;
create table `test` (
`id` int(11) not null auto_increment,
`a` int(11) not null default 1,
`b` int(11) not null default 1,
`c` int(11) not null default 1,
`d` int(11) not null default 1,
primary key (`id`) using btree
) engine = innodb auto_increment = 1 character set = utf8mb4 collate = utf8mb4_general_ci row_format = compact;
set foreign_key_checks = 1;
alter table test add index sindex(a,b,c);
批量插入100w條資料做測試,漫長的等待過程,超時 set_time_limit(0);
$n = 1000000;
for ($i = 0; $i <= $n; $i++)
測試索引命中、為了更清晰直觀體現索引命中率、我把結果都截圖到每條語句的下方導致篇幅過長;
結論:1.and and 只要用到了最左側a都會使用到索引
2.a and b or c 不會使用索引
3.最左側a列被大於、小於、不等於比較的、不使用索引
4.b列 c列使用大於、小於、不等於比較的 會使用索引
5. order by a desc group by a 只要保持最左側a原則 都會使用索引;
透徹理解聯合索引 a,b,c
目錄 用到索引的有a,ab,abc,ac 因為優化器會自動調整and前後的順序,所以ba,cba,bca,ca都會用到索引,其他的都不會用到該索引。ac這一組僅僅是a用到索引。組合索引 有 最左字首 原則,遇到範圍查詢 聯合索引是一顆b 樹 a,b 情況描述 在mysql的user表中,對a,b,c...
mysql聯合索引詳解 mysql 聯合索引詳解
聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...
mysql聯合索引技術 mysql 聯合索引詳解
聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...