MYSQL索引問(wèn)題:索引在查詢(xún)中如何使用?看了很多資料都只說(shuō)索引的建立。是否建立了就不用再理會(huì )?
這里有篇博客《使用例子來(lái)介紹 MySQL索引的簡(jiǎn)單用法》
021yin.com /article/use-examples-to-introduce-simple-usage-of-mysql-index.html
??假如你有一個(gè)表,
SQL> CREATE TABLE test_tab (
2 id INT,
3 name VARCHAR(10),
4 age INT,
5 val VARCHAR(10)
6 );
你的業(yè)務(wù),有一個(gè)查詢(xún),是
SELECT * FROM test_tab WHERE name = 一個(gè)外部輸入的數據
剛開(kāi)始,數據不多的時(shí)候,執行效果還不錯。
隨著(zhù)數據量的增加,這個(gè)查詢(xún),執行起來(lái),越來(lái)越慢了。
然后在 name 上面 建立了索引
CREATE INDEX idx_test4_name ON test_tab (name );
這樣, 可以加快前面那個(gè)查詢(xún)的速度。
但是,某天,你執行了下面這個(gè)SQL, 發(fā)現速度又慢了
SELECT * FROM test_tab WHERE age = 25
為啥呢? 因為 age 字段上面,沒(méi)有索引
索引只在 name 上面有
換句話(huà)說(shuō), 也就是 WHERE 里面的條件, 會(huì )自動(dòng)判斷,有沒(méi)有 可用的索引,如果有, 該不該用。
多列索引,就是一個(gè)索引,包含了2個(gè)字段。
例如:
CREATE INDEX idx_test_name_age ON test_tab (name, age);
那么
SELECT * FROM test_tab
WHERE
name LIKE '張%'
AND age = 25
這樣的查詢(xún),將能夠使用上面的索引。
多列索引,還有一個(gè)可用的情況就是, 某些情況下,可能查詢(xún),只訪(fǎng)問(wèn)索引就足夠了, 不需要再訪(fǎng)問(wèn)表了。例如:
SELECT
AVG( avg ) AS 平均年齡
FROM
test_tab
WHERE
name LIKE '張%'
這個(gè)時(shí)候, name 與 age 都包含在索引里面。
?? 查詢(xún)不需要去檢索表中的數據。