Answers:
如何在选择语句中使用索引?
这条路:
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);
还有更多的方法检查此
我需要明确指定吗?
在一般,如果使用索引,然后可能不必执行进一步书签查找的成本假定不仅仅是扫描整个表的成本低的索引将被使用。
如果您的查询采用以下形式:
SELECT Name from Table where Name = 'Boris'
每1000行中就有1行名为Boris,几乎肯定会使用它。如果每个人的名字都是鲍里斯(Boris),则可能会使用表扫描,因为索引不太可能是访问数据的更有效策略。
如果它是一个宽表(很多列),您可以执行以下操作:
SELECT * from Table where Name = 'Boris'
然后,如果可以合理地假设从表中检索其他列要比查找名称花费更多的时间,或者可能再次检索名称,则它仍可能选择执行表扫描。反正很多行。
索引提示仅适用于Microsoft Dynamics数据库服务器。对于传统的SQL Server,您在'Where'子句中定义的筛选器应说服引擎使用任何相关的索引...只要引擎的执行计划可以有效地识别如何读取信息(是全表扫描还是索引扫描) )-作为内置性能优化器的一部分,它必须在执行正确的语句之前将两者进行比较。
但是,您可以使用以下方法强制优化器进行扫描
Select *
From [yourtable] With (Index(0))
Where ...
或者通过使用类似的东西来寻找特定的索引
Select *
From [yourtable] With (Index(1))
Where ...
这是你的选择。在对象面板中查看表的索引属性,以了解要使用的索引。它应该匹配您的过滤器。
为了获得最佳结果,请列出将首先返回最少结果的过滤器。我不知道我说的是否对,但是查询过滤器似乎是顺序的;如果您的序列正确,那么优化器就不必通过比较所有组合来为您完成此操作,或者至少不必从比较昂贵的查询开始比较。