MySQL建立索引是提高數據庫查詢效率的一種方法,索引在查詢時可以幫助數據庫快速定位到需要查詢的數據。而在MySQL的查詢語句中,on從句也是一個需要注意索引使用的地方。
on從句是在進行多表查詢時使用的,用于指定條件來匹配兩個表中的數據。在進行on從句的查詢時,如果對于匹配條件沒有建立索引,那么MySQL會進行全表掃描,這會極大地影響查詢速度。
下面的代碼演示了在兩個表進行查詢時,建立索引對查詢效率的影響。
-- 創建兩個表book和author CREATE TABLE book(id INT PRIMARY KEY, title VARCHAR(255), author_id INT); CREATE TABLE author(id INT PRIMARY KEY, name VARCHAR(255)); -- 在author表中插入10萬條數據 INSERT INTO author(id, name) SELECT seq.seq, CONCAT('Author', seq.seq) FROM (SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) seq CROSS JOIN (SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) seq2 CROSS JOIN (SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) seq3; -- 在book表中插入10萬條數據,并設置作者為1到100000中的一個隨機數 INSERT INTO book(id, title, author_id) SELECT seq.seq, CONCAT('Book', seq.seq), ROUND(RAND()*100000+1) FROM (SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) seq CROSS JOIN (SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) seq2 CROSS JOIN (SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) seq3; -- 未建立索引的查詢 EXPLAIN SELECT * FROM book b JOIN author a ON b.author_id = a.id WHERE a.name = 'Author50000'; -- 建立索引的查詢 ALTER TABLE author ADD INDEX idx_name(name); EXPLAIN SELECT * FROM book b JOIN author a ON b.author_id = a.id WHERE a.name = 'Author50000';
在以上代碼中,我們創建了book和author兩個表,并在author表中插入了10萬條數據,在book表中插入了100萬條數據,并對author_id字段建立了索引。我們使用on從句在兩個表上進行查詢,其中條件為author表中name為'Author50000'的記錄,未建立索引的查詢需要掃描整個author表,而建立索引的查詢只需要掃描索引所在的部分。通過使用explain命令可以看到兩個查詢的執行計劃,建立索引的查詢耗時顯著降低。
綜上所述,在進行MySQL查詢時建立索引是提高查詢效率的必要方法,在使用on從句進行多表查詢時同樣需要注意建立索引,以避免不必要的全表掃描。