一、日期大小的比較,傳到xml中的日期格式要符合'yyyy-MM-dd',這樣才能走索引,如:'yyyy'改成'yyyy-MM-dd','yyyy-MM'改成'yyyy-MM-dd'【這樣MYSQL會轉換爲日期類型】緩存
二、條件語句中不管是等於、仍是大於小於,WHERE
左側的條件查詢字段不要使用函數或表達式或數學運算函數
三、WHERE
條件語句嘗試着調整字段的順序提高查詢速度,如把索引字段放在最前面、把查詢命中率高的字段置前等測試
四、保證優化SQL先後其查詢結果是一致的優化
五、在查詢的時候經過將EXPLAIN
命令寫在查詢語句前,測試語句是否有走索引【具體用法百度】設計
六、禁止使用SELECT * FROM
操做,應只返回須要的字段,不須要的字段不要返回code
七、能夠嘗試分解複雜的查詢,在應用層面進行表關聯,以此代替SQL層面的表關聯xml
八、WHERE
子句和ORDER BY
子句涉及到的列建索引排序
九、避免在WHERE
子句中對字段進行NULL
判斷【能夠對錶字段改造一下,字符串型字段默認值設置爲空字符串
,數字型字段默認值設置爲0
,日期型字段默認值設置爲1990-01-01
等】索引
十、避免在WHERE
子句中使用!=
或<>
操做符字符串
十一、避免在WHERE
子句中使用OR
操做符
十二、BETWEEN AND
代替IN
1三、LIKE
'%abc%'不會走索引,而LIKE
'abc%'會走索引
1四、避免對字段進行表達式操做
1五、避免對字段進行函數操做
1六、GROUP BY
操做默認會對GROUP BY
後面的字段進行排序,若是你的程序不須要排序,可在GROUP BY
語句後面加上ORDER BY NULL
去除排序
1七、若是是數值型字段,則儘可能設計爲數值型字段,不要爲了方便、爲了偷懶而給後面維護的同事埋坑
1八、表中全部字段設計爲NOT NULL
1九、返回條數固定時,用LIMIT
語句限制返回記錄的條數,如只須要一條記錄,或確定只有一條記錄符合條件,那建議加上LIMIT 1
20、對於枚舉類型的字段【即有固定羅列值的字段】,建議使用ENUM
而不是VARCHAR
,如性別、星期、類型、類別等
2一、對於存IP地址的字段設計爲成UNSIGNED INT
型
2二、避免在SQL中使用NOW()
、CURDATE()
、RAND()
函數【由於這種方式會致使MYSQL沒法使用SQL緩存】,能夠轉化爲經過傳入參數的方式
2三、對於統計類的查詢【如查詢連續幾個月的數據總量,或查詢同比、環比等】,能夠經過定時查詢並統計到統計表的方式提升查詢速度