Viv*_*vek 87 sql database indexing
让我们说在employee表中,我已经在emp_name表的列上创建了一个索引(idx_name).
我是否需要在select子句中显式指定索引名称,否则它将自动用于加速查询.
如果需要在select子句中指定,那么在select查询中使用index的语法是什么?
小智 79
如果要测试索引以查看它是否有效,请使用以下语法:
SELECT *
FROM Table WITH(INDEX(Index_Name))
Run Code Online (Sandbox Code Playgroud)
WITH语句将强制使用索引.
Vde*_*deX 27
如何在select语句中使用索引?
这条路:
SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);
Run Code Online (Sandbox Code Playgroud)
还有更多方法可以检查这一点
我需要明确指定吗?
Dam*_*ver 13
在一般,如果使用索引,然后可能不必执行进一步书签查找的成本假设不仅仅是扫描整个表的成本低的索引将被使用.
如果您的查询格式如下:
SELECT Name from Table where Name = 'Boris'
Run Code Online (Sandbox Code Playgroud)
1000行中有1行的名字是Boris,它几乎肯定会被使用.如果每个人的名字都是Boris,它可能会采用表扫描,因为索引不太可能是一种更有效的访问数据的策略.
如果它是一个宽表(很多列),你会这样做:
SELECT * from Table where Name = 'Boris'
Run Code Online (Sandbox Code Playgroud)
然后它仍然可以选择执行表扫描,如果它是一个合理的假设,它将花费更多的时间从表中检索其他列,而不是只查找名称,或者再次,如果它可能正在检索一个反正很多行.
优化器将判断您的索引的使用是否会使您的查询运行得更快,如果是,它将使用索引.
根据您的RDBMS,您可以强制使用索引,但除非您知道自己在做什么,否则不建议使用索引.
通常,您应该索引在表join和where语句中使用的列
通过在您的条件内使用索引应用于的列,它将自动包含在内。您不必使用它,但它会在使用时加快查询速度。
SELECT * FROM TABLE WHERE attribute = 'value'
Run Code Online (Sandbox Code Playgroud)
将使用适当的索引。
| 归档时间: |
|
| 查看次数: |
330615 次 |
| 最近记录: |