> mysql查詢優化,請說明:深度潛水
執行MySQL查詢時,查詢優化器會制定執行計劃。 要檢查此計劃,請使用EXPLAIN
>命令。 EXPLAIN
對於理解和優化慢速查詢是無價的,但是許多開發人員將其不足。本文探討了EXPLAIN
的輸出及其在模式和查詢優化中的應用。
鑰匙要點:
EXPLAIN
EXPLAIN
,type
,possible_keys
,key
,rows
,Extra
),以了解查詢處理並識別用於改進的區域。 JOIN
>或WHERE
>條款中的列中策略性地添加索引,以大大降低行掃描,提高速度並最小化加載時間。
EXPLAIN EXTENDED
>用於查詢轉換和執行的詳細見解,尤其是對於復雜的優化任務。
SHOW WARNINGS
>定期使用EXPLAIN
EXPLAIN
>只需將您的>帶有
SELECT
EXPLAIN
樣品輸出可能看起來像這樣:
EXPLAIN SELECT * FROM categoriesG;
這個看似簡潔的輸出豐富的信息。 關鍵列是:
id
:在查詢中的每個SELECT
>的順序標識符(與嵌套子量相關)。 select_type
:SELECT
>查詢的類型(簡單,主,派生,子查詢等)。 SIMPLE
指示無子徵詢或table
type
,system
,const
)到低效率(eq_ref
,指示全表掃描)。
ALL
possible_keys
>
NULL
key
possible_keys
key_len
ref
>
key
rows
>
JOIN
Extra
來查看優化器執行的查詢轉換:EXPLAIN EXTENDED
SHOW WARNINGS
EXPLAIN SELECT * FROM categoriesG;
進行故障排除的性能
EXPLAIN
>讓我們說明優化性能較差的查詢。 考慮缺乏索引的電子商務數據庫(GITHUB上可用)。書寫不好的查詢看起來像這樣:>
<code>********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)</code>
和EXPLAIN
,並且非常高的NULL
>值,指示每個表進行全表掃描。這是極低效率的。 possible_keys
key
>添加主鍵和索引(例如,在rows
條款中使用的列上)大大提高了性能。在添加索引後重新啟動
值和更有效的聯接類型(“ const,”“ eq_ref”)。
JOIN
另一個示例涉及兩個表格的EXPLAIN
,每個表都與rows
>:
UNION
沒有適當的索引,productlines
將顯示完整的表掃描。 添加索引並在策略上放置
EXPLAIN EXTENDED SELECT City.Name FROM City JOIN Country ON (City.CountryCode = Country.Code) WHERE City.CountryCode = 'IND' AND Country.Continent = 'Asia'; SHOW WARNINGS;
EXPLAIN
WHERE
摘要UNION
是維護數據庫健康的關鍵,尤其是在動態應用中。
以上是使用解釋來編寫更好的mysql查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!