您好,登錄后才能下訂單哦!
分享幾個優化MySQL性能的方法?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
MySQL性能優化
在互聯網公司MySQL的使用非常廣泛,大家經常會有MySQL性能優化方面的需求。整理了一些在MySQL優化方面的實用技巧。
Schema與數據類型優化
AUTO_INCREMENT
MD5()
、SHA1()
或者UUID()
等產生的字符串)會任意分布在很大的空間內,會導致INSERT
以及一些SELECT
語句變的很慢ALTER TABLE
操作增加一列),建議先拷貝一張與原表結構一樣的表,再將數據復制進去,最后通過重命名將新表的表名稱修改為原表的表名稱。因為在變更表結構的時候很有可能會鎖住整個表,并且可能會有長時間的不可用InnoDB索引優化
ORDER BY
子句的順序完全一致,并且所有列的排序方向(倒序或者正序)都一樣時,MySQL才能夠使用索引來對結果做排序。有一種情況下ORDER BY
子句可以不滿足索引的最左前綴的要求,就是前導列為常量的時候。like
來匹配字符串類型的字段的值時,盡可能的使用前綴匹配like ‘XX%'
,避免使用 like ‘%XX'
OR
條件),建議修改成UNION
的方式,這樣方便命中索引EXPLAIN
的Extra
列可以看到“Using index”信息SELECT
、UPDATE
和DELETE
操作速度變慢,同時占用的內存也會比較多WHERE IN
和WHERE BETWEEN AND
的方式來進行范圍查詢LIMIT
的偏移量越大性能越慢查詢性能優化
1.對于低效的查詢,通常從兩個方面來分析:
2.一般MySQL能夠使用以下三種方式應用WHERE條件,從好到壞依次為:
3.MySQL從設計上讓連接和斷開連接都很輕量級,在返回一個小的查詢結果方面很高效。在一個通用服務器上,也能夠運行每秒超過10萬的查詢,一個千兆網卡也能輕松滿足每秒超過2000次的查詢,MySQL內部每秒能夠掃描內存中上百萬行數據
4.在刪除大量數據時,建議每次刪除一小批量數據后,暫停一會兒再做下一次的刪除
5.無論如何排序都是一個成本很高的操作,所以從性能角度考慮,應盡可能避免排序或者盡可能避免對大量數據進行排序
6.COUNT()函數有兩種不同的作用:它可以統計某個列值的數量,也可以統計行數。最簡單的就是通過COUNT(*)來統計行數
7.關聯查詢的時候要確保關聯的字段上有索引
8.在數據量很大并且歷史數據需要定期刪除的情況下,可以考慮使用分區表
9.如果定了的索引列和分區列不匹配,會導致查詢無法進行分區過濾
10.外鍵約束盡可能避免,通常通過程序來實現,心中要有外鍵
11.觸發器、存儲過程、自定義函數等最好不要使用
12.盡可能的利用查詢緩存,如果在寫查詢語句的時候有一些不確定的數據(NOW()或者CURRENT_DATE()等)時,則不會被緩存
13.用多個小表代替一個大表對查詢緩存有好處
14.批量寫入時只需要做一次緩存失效,所以相比單條寫入(每寫入一次,緩存就失效)效率更好,對于寫密集型的應用,直接禁用查詢緩存
15.如果緩存的空間太大,在過期操作的時候可能會導致服務器僵死
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。