下面列舉了幾個常見有助于提升MySQL效率的Schema設計規范及SQL使用建議:
1、所有的InnoDB表都設計一個無業務用途的自增列做主鍵,對于絕大多數場景都是如此,真正純只讀用InnoDB表的并不多,真如此的話還不如用TokuDB來得劃算;
2、字段長度滿足需求前提下,盡可能選擇長度小的。此外,字段屬性盡量都加上NOT NULL約束,可一定程度提高性能;
3、盡可能不使用TEXT/BLOB類型,確實需要的話,建議拆分到子表中,不要和主表放在一起,避免SELECT * 的時候讀性能太差。
4、讀取數據時,只選取所需要的列,不要每次都SELECT *,避免產生嚴重的隨機讀問題,尤其是讀到一些TEXT/BLOB列;
5、對一個VARCHAR(N)列創建索引時,通常取其50%(甚至更小)左右長度創建前綴索引就足以滿足80%以上的查詢需求了,沒必要創建整列的全長度索引;
6、通常情況下,子查詢的性能比較差,建議改造成JOIN寫法;
7、多表聯接查詢時,關聯字段類型盡量一致,并且都要有索引;
8、多表連接查詢時,把結果集小的表(注意,這里是指過濾后的結果集,不一定是全表數據量小的)作為驅動表;
9、多表聯接并且有排序時,排序字段必須是驅動表里的,否則排序列無法用到索引;
10、多用復合索引,少用多個獨立索引,尤其是一些基數(Cardinality)太小(比如說,該列的唯一值總數少于255)的列就不要創建獨立索引了;
11、類似分頁功能的SQL,建議先用主鍵關聯,然后返回結果集,效率會高很多;