2013-04-11 88 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)