mysql通過建立並填充臨時表的方式來執行union,因此很多優化無法在union查詢中很好應用。所以需要手動將where、limit、order by等語句下推到union子查詢中。
如果不是需要對結果去重,請使用union all。即使有all,mysql也會將結果先存於臨時表中,再讀出,這很多時候是沒有必要的。
percona toolkit中的pt-query-advisor能夠解析查詢日誌,分析查詢模式,給出可能存在潛在問題的查詢。
使用者自定義變數是乙個用來儲存內容的臨時容器。
set
@one :=
1
它能夠方便一些查詢。不過一些場景需要注意
自定義變數的查詢無法使用查詢快取
不能再常亮或者識別符號的地方使用自定義變數。
生命週期在乙個連線內有效
使用連線池或者持久化連線,可能會讓一些不相干**產生互動
5.0之前大小寫敏感
不能顯示宣告型別
優化器可能會將其優化掉
賦值和順序的時間點並不總是固定的,由優化器決定
:=優先順序較低,請使用括號
使用未定義的變數不會報錯
例子之後再補吧,家裡停電了…
《高效能MySQL》第6章 查詢效能優化
6.2 慢查詢基礎 優化資料訪問 6.2.1 是否向資料庫請求了不需要的資料 有些查詢會請求超過實際需要的資料,然後這些多餘的資料會被應用程式丟棄。這會給mysql伺服器帶來額外的負擔,並增加網路開銷,另外也會消耗應用伺服器的cpu和記憶體資源。6.2.2 mysql是否在掃瞄額外的記錄6.3 重構...
《高效能MySQL》之MySQL查詢效能優化
響應時間過長。如果把查詢看做是乙個任務,那麼它由一系列子任務組成,每個子任務都會消耗一定的時間。如果要優化查詢,實際上優化其子任務,要麼消除其中一些子任務,要麼減少子任務的執行次數,要麼讓子任務執行得更快。查詢的生命週期 客戶端 伺服器 伺服器上解析 生成執行計畫 執行 返回結果給客戶端。其中 執行...
高效能mysql 樹 高效能mysql精要
1 explain 中 extra using index 表示覆蓋索引,sql優化中最好能使用覆蓋索引,否則 二級索引 需要回表查詢。所謂覆蓋索引,是指要查詢的列正好是索引,而條件也是這個索引之一 2 where 語句中 條件等於主鍵的 在核心索引層完成,條件等於非索引的,在服務層完成 3 讀索引...