當希望 mysql 能夠以更高的效能進行查詢時,最好的辦法就是弄清楚 mysql 是如何進行優化和查詢的。一旦理解這一點,很多查詢優化工作實際上就是遵循一些原則讓優化器能夠按照預想的合理的方式執行。
下圖顯示了 mysql 如何處理乙個使用者請求的過程。
[img]
從圖中可見,它的處理過程大致是這樣的:
(1)客戶端傳送一條查詢給伺服器。
(2)伺服器先檢查查詢快取,如果命中,則立刻返回快取結果,否則進入下一步。
(3)服務端進行 sql 解析、預處理,再由優化器生成對應的執行計畫。
(4)mysql 根據優化器生成的執行計畫,呼叫儲存引擎的 api 來執行計畫。
(5)返回結果給客戶端。
在優化關聯查詢時需要強調以下幾點:
(1)確保 on 或者 using 子句中的列上有索引。在建立索引的時候就要考慮到關聯的順序。比如,當表 a 和表 b 用列 c 關聯時,如果優化器的關聯順序是 b、a,那麼就不需要在 b 表的對應列上建立索引。沒有用到的索引只會帶來額外的負擔。一般來說,除非有其他理由,否則只需要在關聯順序中的第二個表的相應列上建立索引。
(2)確保任何的 group by 和 order by 中的表示式只涉及到乙個表中的列,這樣 mysql 才有可能使用索引來優化這個過程。
(3)當公升級 mysql 時需要注意:關聯語法、運算子優先順序等其他可能會發生變化的地方。因為以前是普通關聯的地方可能會變成笛卡爾積,不同型別的關聯可能會生成不同的結果等。
注:摘自《高效能 mysql》第六章 -- 查詢效能優化。
MySQL查詢執行路徑
mysql查詢執行路徑 1.客戶端傳送一條查詢給伺服器 2.伺服器先會檢查查詢快取,如果命中了快取,則立即返回儲存在快取中的結果。否則進入下一階段 3.伺服器端進行sql解析 預處理,再由優化器生成對應的執行計畫 4.mysql根據優化器生成的執行計畫,呼叫儲存引擎的api來執行查詢 5.將結果返回...
bat檔案 執行路徑
最近用到了bat的一些東西,就是用c 程式呼叫bat檔案時,bat檔案中的路徑怎樣動態的獲取呢?用 dp0 可以得到。比如要註冊乙個名為test.dll的檔案,dll檔案和bat檔案放在同乙個資料夾下 bat檔案寫法 regsvr32 dp0test.dll s 又比如要呼叫另外乙個bat檔案 檔名...
c 獲取程式執行路徑
獲取exe路徑 注意,不要使用system.environment.currentdirectory 或system.io.directory.getcurrentdirectory 因為他們代表獲得當前路徑,可以被改變的,例如openfiledialog每換一次目錄就會改變它。獲取當前路徑的父路徑...