2013-04-11 87 views
1

我覺得很簡單的問題。我想在桌上做一個索引掃描,但它沒有這樣做。所以我有一個ID列具有唯一聚簇索引的表,並有兩個其他列,first_name和last_name。以下是我的查詢...如何讓數據庫執行索引掃描?

SELECT FIRST_NAME 
FROM TABLE_A 
WHERE FIRST_NAME LIKE 'GUY' 

我認爲,因爲我沒有在索引列上搜索它應該這樣做。

爲什麼它不工作,我如何確保每當我需要它時都可以使用它?

+0

我不明白你想要什麼。你有一個到FIRST_NAME專欄的索引? – Max 2013-04-11 17:34:50

+0

您正在使用哪些DBMS?甲骨文? Postgres的?順便說一句:使用'LIKE'和一個不包含通配符的表達式是沒有意義的。 – 2013-04-11 18:11:37

+0

很抱歉,如果不清楚。索引放在ID列上。我正在使用SQL Server 2008 R2。對不起,關於類似的事情。我想我可以用=號來代替。 – crack3r 2013-04-11 20:42:49

回答

0

由於first_name不是任何索引的一部分,因此數據庫中沒有使用索引的要點 - 它必須掃描所有索引,訪問每個條目的實際表格行,並在那裏評估first_name值。由於無論如何它都訪問所有表的行,優化器只是喜歡執行全表掃描,並保存(無用的)索引訪問。

如果您想使用索引加快查詢速度,則應該創建一個涵蓋此列的索引。例如:

CREATE INDEX table_a_first_name_ind ON table_a(first_name)