国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

優化MySQL數據庫中的查詢語句詳解

2024-07-24 12:46:55
字體:
來源:轉載
供稿:網友

很多時候基于php+MySQL建立的網站所出現的系統性能瓶頸往往是出在MySQL上,而MySQL中用的最多的語句就是查詢語句,因此,針對MySQL數據庫查詢語句的優化就顯得至關重要!本文就此問題做出詳細分析如下:

1、判斷是否向MySQL數據庫請求了不需要的數據,如下列情況:

(1)、查詢不需要的數據,例如你需要10條數據,但是你選出了100條數據加了limit做限制。
(2)、多表關聯時返回全部列
(3)、總是取出全部列select*......取出全部列,會讓優化器無法完成索引覆蓋掃描這類優化,還為服務器帶來額外的I/O、內存、和cpu的消耗
(4)、重復查詢相同的數據例如,在用戶評論的地方需要查詢用戶的頭像的URL,那么用戶多次評論的時候將這個數據緩存起來,需要的時候從緩存取出,這樣性能會更好。

2、mysql是否在掃描額外的記錄

最簡單衡量查詢開銷的三個指標如下:響應時間、掃描的行數、返回的行數

響應時間:服務時間和排隊時間。服務時間是指數據庫處理這個查詢真正花費的時間。排隊時間是指服務器因為等待某些資源而沒有真正執行的查詢。

掃描的行數和返回的行數:理想情況下掃描的行數和返回的行數應該是相同的。

一般MYSQL能夠使用如下三種方式應用where條件記錄,從好到壞依次為:

(1)、在索引中使用where條件來過濾不匹配的記錄,在存儲索引層完成。

(2)、使用索引覆蓋掃描來返回記錄,直接從索引中過濾不需要的記錄并返回命中的結果,在mysql服務器層完成,但無需在回表查詢記錄。

(3)、從數據表中返回數據,然后過濾不滿足條件的記錄,在mysql服務器層完成,需要先從數據表讀出記錄然后過濾

如果發現查詢需要掃描大量的數據但返回少數的行,那么通常可以嘗試下面的技巧:

(1)、使用索引覆蓋掃描,把所有需要的列都放到索引中,這樣存儲引擎無須返回表獲取對應行就可以返回結果了。

(2)、改變庫表結構,使用單獨的匯總表。

(3)、重寫這個復雜的查詢

3、重構查詢的方式

(1)、一個復雜查詢還是多個簡單查詢:

Mysql內部每秒能夠掃描內存中上百萬條數據,相比之下,mysql響應數據給客戶端就慢得多,在其他條件都相同的時候,使用盡可能少的查詢當然是好的,但有時候將一個大查詢分解為多個小查詢都是很有必要的。

(2)、切分查詢:

刪除舊數據是一個很好的例子,在定期清除大量數據時,如果用一個大的語句一次性完成的話,則可能一次鎖住很多數據,占滿整個事物日志。耗盡系統資源,阻塞很多小的但很重要的查詢。

Mysql>deletefrommessageswherecreated<DATE_SUB(NOW(),INTERVAL3MONTH);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐山县| 谷城县| 荔波县| 饶阳县| 台山市| 黑水县| 安化县| 雷波县| 什邡市| 海口市| 巨鹿县| 都兰县| 长丰县| 志丹县| 宁城县| 岳阳县| 门源| 枣阳市| 泸州市| 肥乡县| 米泉市| 海盐县| 彭州市| 宝坻区| 巴塘县| 临武县| 苏尼特左旗| 六安市| 泸州市| 西安市| 北票市| 金沙县| 奎屯市| 江津市| 全州县| 封开县| 潢川县| 清河县| 台山市| 朝阳市| 连平县|