假设有与非主键列(A,B,C,d),其中存在于(A,B,C,d)部分键查找
将查询涉及的索引表中的(A,B,C,D)的子集利用索引?所描述的部分密钥查找存在哪些特质?
我特别感兴趣的是如何在SQL Server,Sqlite,Firebird中工作。
假设有与非主键列(A,B,C,d),其中存在于(A,B,C,d)部分键查找
将查询涉及的索引表中的(A,B,C,D)的子集利用索引?所描述的部分密钥查找存在哪些特质?
我特别感兴趣的是如何在SQL Server,Sqlite,Firebird中工作。
是,如果搜索键在相同的顺序的索引字段。其他不,假设你有指示去图书馆,请看第三章第三页“伟大的盖茨比”。这就像使用多字段索引一样。
现在说,你被告知得到第3章,第三页......没有书名。你必须看每本书。
使用索引初始子集的查询应使用索引。 (A),(A)和(B)以及(A)和(B)和(C)上的同等连接应该使用该索引。
其实,你可以添加一个不平等一样,所以,指数应该支持所有的以下内容:
x.C = y.C?这会导致全表扫描吗? – 2013-03-25 01:34:48
这应该导致索引扫描而不是表扫描。它比表扫描要快,但不像索引寻找像Gordon上面列出的场景那么快。有更多的信息[这里](http://stackoverflow.com/questions/1136524/sql-server-plans-difference-between-index-scan-index-seek)。 – 2013-03-25 02:05:35
那么为了支持这种情况,我将不得不分别在A,B,C,D上声明4个单独的索引?例如。 “以'The%'开头的第3章获得所有书籍” – 2013-03-25 01:54:05
是的。缺点是插入和更新变得更加昂贵。 – 2013-03-25 04:13:20