SQL查詢優化

2021-07-14 20:02:23 字數 1011 閱讀 5179

避免使用 select * ... 的做法
這樣,很多時候查詢出來的字段,資料是冗餘的,是沒有意義的,會消耗網路、cpu、記憶體等等。

如果要查詢某些字段,但是查詢這些欄位的資料時,會大量的掃瞄這個表,耗費的資源太大了,怎麼辦呢?

我們應該建立合適的索引,避免大量的掃瞄表。

比如,我每3個月要刪除大約1000000條資料,如果直接寫為:

delete

from

table

where create_time < date_sub(now(),interval

3month)

因為資料量龐大,sql的執行會花費大量時間,可能一次需要鎖住很多資料,耗盡系統資源,同時阻塞很多小的但是很重要的查詢。

明智的做法如下:

$rows_affected=0;

dowhile($rows_affected>0)

客戶端傳送一條查詢給伺服器

伺服器查詢快取,如果命中,直接返回快取結果,如果不命中,繼續

伺服器經過解析、預處理等,經過查詢優化器生成查詢計畫

查詢引擎,呼叫不同的api(myisam、innodb等),來執行查詢

將結果返回給客戶端

總體可以總結為:

傳送sql—>查詢快取—>優化器生成sql—>引擎執行sql—>返回結果

mysql客戶端與伺服器之間的通訊是半雙工的,即客戶端和伺服器不能同時發生通訊。

乙個人獲得了球后,另乙個人要等待傳球。

同樣客戶端傳送了查詢請求,要等待著伺服器端返回資料。

伺服器端返回完了資料,客戶端才能再傳送請求。

一般地,預設將伺服器端返回的結果儲存在伺服器端的快取中,但是,也可以使用函式,不快取,直接返回給客戶端。

存在快取中,會消耗記憶體,但是伺服器端的處理速度會加快。

不存在快取中,不會消耗記憶體,但是伺服器端處理的速度回減慢。

…待續

查詢優化 SQL優化

查詢優化注意點 代表查詢速度比較 1 所有查詢必須注意 的使用必要性 cout 1 cout 2 字段 主鍵索引 字段 普通索引 字段 沒有索引 3 乙個字段 多個字段 欄位多越慢 4 大於10000和大於10001的區別 後者大於前者 5 列沒別名 列 有別名6 兩個條件,where時應該將符合資...

查詢優化 sql

查詢1 declare d datetime set d getdate select top 1000 from product where contains name,男上裝 or contains text,男上裝 select datediff ms,d,getdate set d getd...

優化sql查詢

如何寫出高效能的sql語句 執行計畫是資料庫根據sql語句和相關表的統計資訊坐出的乙個查詢方案,這個方案是由查詢優化器自動分析產生的,比如一條sql語句如果用來從乙個n條記錄中查詢其中一條,那查詢優化器會選擇 索引掃瞄 方式。該錶如果使用了歸檔,那查詢優化器就會改變方案,採用 全表掃瞄 方式。執行計...