如何在选择语句中使用索引?

让我们说在雇员表中,我已经在表的 emp_name列上创建了一个索引(idx _ name)。

Do I need to explicitly specify the index name in select clause or it will automatically used to speed up queries.

如果需要在 select 子句中指定索引,则在选择查询中使用索引的语法是什么?

503661 次浏览

通过使用索引应用于您的条件中的列,将自动包含该列。您不必使用它,但是当使用它时,它将加速查询。

SELECT * FROM TABLE WHERE attribute = 'value'

将使用适当的索引。

问得好,

通常数据库引擎应该根据其构建的查询执行计划自动选择要使用的索引。但是,在一些非常罕见的情况下,您需要强制 DB 使用特定的索引。

为了能够回答你的具体问题,你必须指定你正在使用的数据库。

对于 MySQL,您需要阅读有关如何执行此操作的 索引提示语法文档

优化器将判断使用索引是否会使查询运行得更快,如果是的话,它将使用索引。

Depending on your RDBMS you can force the use of an index, although it is not recommended unless you know what you are doing.

一般情况下,您应该对在表联接和 where 语句中使用的列进行索引

In 将军, the index will be used if the assumed cost of using the index, and then possibly having to perform further bookmark lookups is lower than the cost of just scanning the entire table.

If your query is of the form:

SELECT Name from Table where Name = 'Boris'

And 1 row out of 1000 has the name Boris, it will almost certainly be used. If everyone's name is Boris, it will probably resort to a table scan, since the index is unlikely to be a more efficient strategy to access the data.

如果是一个很宽的表格(很多列) ,你会这样做:

SELECT * from Table where Name = 'Boris'

然后它仍然可以选择执行表扫描,如果合理的假设是从表中检索其他列比仅仅查找名称所需要的时间更长,或者再一次,如果它可能无论如何都要检索很多行的话。

一般情况下,在表上创建索引时,数据库在搜索该表中的数据时会自动使用该索引。你不需要做任何事。

但是,在 MSSQL,您可以指定一个 index hint,它可以指定应该使用特定的索引来执行此查询。关于这方面的更多信息可以找到 给你

Index hint似乎也可用于 MySQL。感谢都铎 · 康斯坦丁。

如果你想测试索引,看看它是否有效,语法如下:

SELECT *
FROM Table WITH(INDEX(Index_Name))

WITH语句将强制使用索引。

如何在 select 语句中使用 index? < br > 这样:

   SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);

And many more ways check 这个

我是否需要明确指定?

  • 不,不需要明确指定。
  • DB engine should automatically select the index to use based on query execution plans it builds from @Tudor Constantin answer.
  • 优化器将判断使用索引是否会使查询运行得更快,如果是的话,它将使用索引。来自@niktrl

The index hint is only available for Microsoft Dynamics database servers. 对于传统的 SQLServer,您在“ Where”子句中定义的过滤器应该说服引擎使用任何相关的索引..。 如果引擎的执行计划能够有效地识别如何读取信息(无论是全表扫描还是索引扫描) ,那么它必须在正确执行语句之前对两者进行比较,作为其内置性能优化器的一部分。

但是,您可以通过使用类似这样的东西来强制优化器进行扫描

    Select  *
From    [yourtable] With (Index(0))
Where   ...

或者使用类似于

    Select  *
From    [yourtable] With (Index(1))
Where   ...

选择权在你。在对象面板中查看表的索引属性,以了解要使用哪个索引。它应该和你的滤光片相配。

For best results, list the filters which would return the fewest results first. 我不知道我这么说是否正确,但是看起来查询过滤器是连续的; 如果你得到了正确的序列,优化器不应该通过比较所有的组合来为你做这件事,或者至少不应该开始与更昂贵的查询进行比较。