1、不要在列上使用函數(shù)和進(jìn)行運(yùn)算
2、盡量避免使用 != 或 not in或 <> 等否定操作符
3、盡量避免使用 or 來連接條件
4、MySQL 只能使用一個(gè)單列索引,會(huì)從多個(gè)索引中選擇一個(gè)限制最為嚴(yán)格的索引。為了提高性能,可以使用復(fù)合索引
5、復(fù)合索引的最左前綴原則。復(fù)合索引遵守“最左前綴”原則,即在查詢條件中使用了復(fù)合索引的第一個(gè)字段,索引才會(huì)被使用
6、覆蓋索引的好處:如果一個(gè)索引包含所有需要的查詢的字段的值,直接根據(jù)索引的查詢結(jié)果返回?cái)?shù)據(jù),而無需讀表,能夠極大的提高性能。因此,可以定義一個(gè)讓索引包含的額外的列,即使這個(gè)列對(duì)于索引而言是無用的。
7、索引不會(huì)包含有NULL值的列,只要列中包含有 NULL 值都將不會(huì)被包含在索引中,復(fù)合索引中只要有一列含有 NULL值,那么這一列對(duì)于此復(fù)合索引就是無效的。因此,在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),除非有一個(gè)很特別的原因使用 NULL 值,不然盡量不要讓字段的默認(rèn)值為 NULL。
8、like 語句的索引失效問題