101個MySQL調試和優化技巧(2)_MySQL教程
推薦:在MySQL中使用GTIDs復制協議和中斷協議的教程MySQL5.6有很多新的特性,其中很多人都感興趣的一條就是全局事務序號功能(GTIDs)。而大家都對這一特性很感興趣的原因也很好理解,即:本來重新連接從服務器和一個新的主服務器一直是件很麻煩的事,然而在啟用GTIDs功能之后就變得簡單易行。可是,GTIDs的使用不單單是用
51.檢查和經常優化表.
52. 經常重寫InnoDB表優化.
53. 有時,當添加列時刪除索引,然后在添加回來索引,這樣就會更快.
54. 針對不同的需求,使用不同的存儲引擎.
55. 使用歸檔存儲引擎日志表或審計表-這是更有效地寫道.
56. 會話數據存儲在緩存(memcache)的而不是MySQL中 – 緩存允許自動自動填值的,并阻止您創建難以讀取和寫入到MySQL的時空數據.
57.存儲可變長度的字符串時使用VARCHAR而不是CHAR – 節省空間,因為固定長度的CHAR,而VARCHAR長度不固定(UTF8不受此影響).
58. 逐步進行模式的變化 – 一個小的變化,可以有巨大的影響.
59.在開發環境中測試所有模式,反映生產變化.
60. 不要隨意更改你的配置文件中的值,它可以產生災難性的影響.
61. 有時候,在MySQL的configs少即是多.
62.有疑問時使用一個通用的MySQL配置文件.

查詢優化:
63. 使用慢查詢日志去發現慢查詢。
64. 使用執行計劃去判斷查詢是否正常運行。
65. 總是去測試你的查詢看看是否他們運行在最佳狀態下 –久而久之性能總會變化。
66. 避免在整個表上使用count(*),它可能鎖住整張表。
67. 使查詢保持一致以便后續相似的查詢可以使用查詢緩存。
68. 在適當的情形下使用GROUP BY而不是DISTINCT。
69. 在WHERE, GROUP BY和ORDER BY子句中使用有索引的列。
70. 保持索引簡單,不在多個索引中包含同一個列。
71. 有時候MySQL會使用錯誤的索引,對于這種情況使用USE INDEX。
72. 檢查使用SQL_MODE=STRICT的問題。
73. 對于記錄數小于5的索引字段,在UNION的時候使用LIMIT不是是用OR.
74. 為了 避免在更新前SELECT,使用INSERT ON DUPLICATE KEY或者INSERT IGNORE ,不要用UPDATE去實現。
75. 不要使用 MAX,使用索引字段和ORDER BY子句。
76. 避免使用ORDER BY RAND().
77. LIMIT M,N實際上可以減緩查詢在某些情況下,有節制地使用。
78. 在WHERE子句中使用UNION代替子查詢。
79. 對于UPDATES(更新),使用 SHARE MODE(共享模式),以防止獨占鎖。
80. 在重新啟動的MySQL,記得來溫暖你的數據庫,以確保您的數據在內存和查詢速度快。
81. 使用DROP TABLE,CREATE TABLE DELETE FROM從表中刪除所有數據。
82. 最小化的數據在查詢你需要的數據,使用*消耗大量的時間。
83. 考慮持久連接,而不是多個連接,以減少開銷。
84. 基準查詢,包括使用服務器上的負載,有時一個簡單的查詢可以影響其他查詢。
85. 當負載增加您的服務器上,使用SHOW PROCESSLIST查看慢的和有問題的查詢。
86. 在開發環境中產生的鏡像數據中 測試的所有可疑的查詢。
MySQL 備份過程:
87. 從二級復制服務器上進行備份。
88. 在進行備份期間停止復制,以避免在數據依賴和外鍵約束上出現不一致。
89. 徹底停止MySQL,從數據庫文件進行備份。
90. 如果使用 MySQL dump進行備份,請同時備份二進制日志文件 – 確保復制沒有中斷。
91. 不要信任LVM 快照 – 這很可能產生數據不一致,將來會給你帶來麻煩。
92. 為了更容易進行單表恢復,以表為單位導出數據 – 如果數據是與其他表隔離的。
93. 當使用mysqldump時請使用 –opt。
94. 在備份之前檢查和優化表。
95. 為了更快的進行導入,在導入時臨時禁用外鍵約束。
96. 為了更快的進行導入,在導入時臨時禁用唯一性檢測。
97. 在每一次備份后計算數據庫,表以及索引的尺寸,以便更夠監控數據尺寸的增長。
98. 通過自動調度腳本監控復制實例的錯誤和延遲。
99. 定期執行備份。
100. 定期測試你的備份。
分享:MySQL獲取所有分類的前N條記錄比如有文章表 Article(Id,Category,InsertDate),現在要用SQL找出每種類型中時間最新的前N個數據組成的集合,一段不錯的代碼,留存備用 SELECT A1.* FROM Article AS A1 INNER JOIN (SELECT A.Category,A.InsertDate FROM Article AS A LEFT JOIN Article AS B ON A.Ca
- 相關鏈接:
- 教程說明:
MySQL教程-101個MySQL調試和優化技巧(2)
。