2013-03-25 85 views
2

假設有與非主鍵列(A,B,C,d),其中存在於(A,B,C,d)部分鍵查找

將查詢涉及的索引表中的(A,B,C,D)的子集利用索引?所描述的部分密鑰查找存在哪些特質?

我特別感興趣的是如何在SQL Server,Sqlite,Firebird中工作。

回答

3

是,如果搜索鍵在相同的順序的索引字段。其他不,假設你有指示去圖書館,請看第三章第三頁「偉大的蓋茨比」。這就像使用多字段索引一樣。

現在說,你被告知得到第3章,第三頁......沒有書名。你必須看每本書。

+0

那麼爲了支持這種情況,我將不得不分別在A,B,C,D上聲明4個單獨的索引?例如。 「以'The%'開頭的第3章獲得所有書籍」 – 2013-03-25 01:54:05

+1

是的。缺點是插入和更新變得更加昂貴。 – 2013-03-25 04:13:20

4

使用索引初始子集的查詢應使用索引。 (A),(A)和(B)以及(A)和(B)和(C)上的同等連接應該使用該索引。

其實,你可以添加一個不平等一樣,所以,指數應該支持所有的以下內容:

  • XA =雅
  • XA = YA和XB> YB
  • XA =雅和的xB = YB
  • XA = YA和XB = Yb和XC> YC
  • XA = YA和XB = Yb和XC = YC
  • XA = YA和XB = Yb和XC = YC並且x。 d> y.D
  • x.A = y.A和x.B = y.B和x.C = y.C和x.D = y.D
+0

x.C = y.C?這會導致全表掃描嗎? – 2013-03-25 01:34:48

+1

這應該導致索引掃描而不是表掃描。它比表掃描要快,但不像索引尋找像Gordon上面列出的場景那麼快。有更多的信息[這裏](http://stackoverflow.com/questions/1136524/sql-server-plans-difference-between-index-scan-index-seek)。 – 2013-03-25 02:05:35