單值索引:create index 索引名 on 表名(需要建立索引的字段)
復合索引:create index 索引名 on 表名(需要建立索引的字段,需要建立索引的字段,.........)
(1)不要在索引列上做任何操作
<1>不要在索引列使用函式
select sql_no_cache * from a where name=『張三』;(正確)
select sql_no_cache * from emp where left(name,1)=『張』;(錯誤)
<2>不要轉換索引列型別
select sql_no_cache * from a where name=『111』;(正確)
select sql_no_cache * from emp where name=111;(錯誤)
(2)索引列上有範圍查詢時,範圍條件右邊的列將失效
create index idx_age_deptid_name on emp(age,deptid,name);
explain select sql_no_cache * from emp where emp.age=30 and deptid=5 and emp.name = 『abcd』;(執行索引age,deptid,name)
explain select sql_no_cache * from emp where emp.age=30 and deptid<5 and emp.name = 『abcd』;(執行索引age,deptid)
explain select sql_no_cache * from emp where emp.age=30 and deptid<>5 and emp.name = 『abcd』;(執行索引age,deptid)
(3)使用!= 和<>的時候,有時會導致無法使用索引進行全域性掃瞄
create index idx_deptid on emp(deptid);
explain select sql_no_cache * from emp where deptid!=5;(不執行索引)
(4)is not null 不能使用索引,is null 可以使用索引
explain select sql_no_cache * from emp where name is not null;(不能)
explain select sql_no_cache * from emp where name is null;(能)
(5)like 以萬用字元% 或者_ 開頭,則索引失效(注意是開頭,末尾和中間不受影響)
(6)字串不加單引號,則索引失效(列型別轉換)
(7)盡量使用覆蓋索引,(盡量不使用select * 可以提公升查詢效率)
create index idx_age on a(age);
explain select sql_no_cache age from a where a.age=30
(2)和(3)這塊需要仔細注意,不能一概而論!
mysql索引 使用注意事項
索引使用缺點 雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert,update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案 建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在要給大表上建了多種組合索引,索引檔案會膨脹很寬 ...
mysql索引注意事項
在查詢條件中必須有復合索引還中最左側的列 在建立多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊 假設你在表的state city和zip資料列上建立了復合索引。索引中的資料行按照state city zip次序排列,因此它們也會自動地按照state city和state次序排...
mysql索引注意事項
1.模糊查詢前導不會走索引 select id,user name,price code from user activity info where user name like zhang 如果非要使用前導索引的話可以借助apache的lucence索引工具 2.欄位預設值不要設定成null 如果...