mysql索引使用注意事項

2021-10-06 23:03:25 字數 1481 閱讀 1549

單值索引: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 如果...