亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分享幾個優化MySQL性能的方法

發布時間:2020-11-05 18:09:58 來源:億速云 閱讀:165 作者:Leah 欄目:開發技術

分享幾個優化MySQL性能的方法?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

MySQL性能優化

在互聯網公司MySQL的使用非常廣泛,大家經常會有MySQL性能優化方面的需求。整理了一些在MySQL優化方面的實用技巧。

Schema與數據類型優化

  1. 整數通常是標識列最好的選擇,因為它們很快并且可以使用AUTO_INCREMENT
  2. 完全“隨機”的字符串(如:MD5()SHA1()或者UUID()等產生的字符串)會任意分布在很大的空間內,會導致INSERT以及一些SELECT語句變的很慢
  3. 如果希望查詢執行得快速且并發性好,單個查詢最好不要做太多的關聯查詢(互聯網公司非常忌諱關聯查詢),利用程序來完成關聯操作
  4. 如果需要對一張比較大的表做表結構變更(ALTER TABLE操作增加一列),建議先拷貝一張與原表結構一樣的表,再將數據復制進去,最后通過重命名將新表的表名稱修改為原表的表名稱。因為在變更表結構的時候很有可能會鎖住整個表,并且可能會有長時間的不可用
  5. 避免多表關聯的時候可以適當考慮一些反范式的建表方案,增加一些冗余字段

InnoDB索引優化

  1. 如果不是按照索引的最左列開始查找,則無法使用索引
  2. 所有的非聚簇索引都需要先通過索引定位到對應的主鍵,然后在到聚簇索引查找數據,所以在定義主鍵索引的時候一定要謹慎
  3. 只有當索引的列順序和ORDER BY子句的順序完全一致,并且所有列的排序方向(倒序或者正序)都一樣時,MySQL才能夠使用索引來對結果做排序。有一種情況下ORDER BY子句可以不滿足索引的最左前綴的要求,就是前導列為常量的時候。
  4. 在使用like來匹配字符串類型的字段的值時,盡可能的使用前綴匹配like ‘XX%',避免使用 like ‘%XX'
  5. 哈希索引是基于哈希表實現的,只有精確匹配索引所有列的查詢才有效,也不遵循索引的最左匹配原則
  6. 服務器需要對多個索引做聯合操作時(通常有多個OR條件),建議修改成UNION的方式,這樣方便命中索引
  7. 對于如何選擇索引的列順序有一個經驗法則:將選擇性最高的列放到索引最前列
  8. 盡可能多的使用覆蓋索引(如果一個索引包含或者說覆蓋所有需要查詢的字段的值,我們就稱之為覆蓋索引),通過EXPLAINExtra列可以看到“Using index”信息
  9. 當ID為主鍵時,創建索引(A),相當于創建了(A)和(A, ID)兩個索引
  10. 表中的索引越多對SELECTUPDATEDELETE操作速度變慢,同時占用的內存也會比較多
  11. InnoDB在二級索引上使用共享鎖,但是訪問主鍵索引需要排他鎖
  12. 盡可能的使用WHERE INWHERE BETWEEN AND的方式來進行范圍查詢
  13. LIMIT的偏移量越大性能越慢
  14. 編寫查詢語句時應該避免單行查找、盡可能的使用數據原生順序從而避免額外的排序操作,并盡可能使用索引覆蓋查詢

查詢性能優化

1.對于低效的查詢,通常從兩個方面來分析:

  1. 確認應用程序是否在檢索大量超過需要的數據。這通常意味著訪問了太多的行,但有時候可能是訪問了太多的列
  2. 確認MySQL服務器層是否在分析大量超過需要的數據行
     

2.一般MySQL能夠使用以下三種方式應用WHERE條件,從好到壞依次為:

  • 在索引中使用WHERE條件倆過濾不匹配的記錄
  • 使用索引覆蓋掃描來返回記錄
  • 從數據表中返回數據,然后過濾不滿足條件的記錄
     

3.MySQL從設計上讓連接和斷開連接都很輕量級,在返回一個小的查詢結果方面很高效。在一個通用服務器上,也能夠運行每秒超過10萬的查詢,一個千兆網卡也能輕松滿足每秒超過2000次的查詢,MySQL內部每秒能夠掃描內存中上百萬行數據

4.在刪除大量數據時,建議每次刪除一小批量數據后,暫停一會兒再做下一次的刪除

5.無論如何排序都是一個成本很高的操作,所以從性能角度考慮,應盡可能避免排序或者盡可能避免對大量數據進行排序

6.COUNT()函數有兩種不同的作用:它可以統計某個列值的數量,也可以統計行數。最簡單的就是通過COUNT(*)來統計行數

7.關聯查詢的時候要確保關聯的字段上有索引

8.在數據量很大并且歷史數據需要定期刪除的情況下,可以考慮使用分區表

9.如果定了的索引列和分區列不匹配,會導致查詢無法進行分區過濾

10.外鍵約束盡可能避免,通常通過程序來實現,心中要有外鍵

11.觸發器、存儲過程、自定義函數等最好不要使用

12.盡可能的利用查詢緩存,如果在寫查詢語句的時候有一些不確定的數據(NOW()或者CURRENT_DATE()等)時,則不會被緩存

13.用多個小表代替一個大表對查詢緩存有好處

14.批量寫入時只需要做一次緩存失效,所以相比單條寫入(每寫入一次,緩存就失效)效率更好,對于寫密集型的應用,直接禁用查詢緩存

15.如果緩存的空間太大,在過期操作的時候可能會導致服務器僵死

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五莲县| 建瓯市| 平武县| 图木舒克市| 新兴县| 广饶县| 太仆寺旗| 福海县| 镇巴县| 锦州市| 黄平县| 铁岭市| 孟州市| 香格里拉县| 阳城县| 田东县| 桃江县| 元阳县| 绥德县| 丁青县| 星座| 湟中县| 灵台县| 乌苏市| 萍乡市| 五莲县| 盐山县| 特克斯县| 呈贡县| 岳西县| 班玛县| 武平县| 长治县| 神农架林区| 霍邱县| 紫阳县| 郎溪县| 绵阳市| 黄陵县| 神池县| 常德市|