MYSQL慢查詢優化方法及優化原則

一、日期大小的比較,傳到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三、對於統計類的查詢【如查詢連續幾個月的數據總量,或查詢同比、環比等】,能夠經過定時查詢並統計到統計表的方式提升查詢速度

相關文章
相關標籤/搜索