2013-03-18 48 views
1

我會嘗試這一次我想..是<>是否符合SARGable?如果不是,我可以用什麼來代替?

我見過的人說<>是優化搜索,<>不優化搜索等,並抱歉,但我想澄清。而我也希望這似乎不可能得到的是一個錯誤的查詢的例子,它使用了<>和一個使用不同運算符的更加SARGable的查詢。我見過有關如何進行大量查詢SARGable的示例,但沒有使用運算符的示例。

我已經試過這個問題了,它一定是人民首腦,因爲他們認爲這不是一個真正的問題,但它是一個真正的問題,我想要一個真正的答案,如果我得到一個真正的答案,然後我可以查看所有存儲的特效,並更好地決定要更改哪些特效。

謝謝..

+0

有什麼區別?您應該關心的問題是「引擎能否正確優化我的查詢?」,然後是「如何調整此查詢以獲得更好的性能?」 – StingyJack 2013-03-18 17:52:52

+1

我不認爲<>是可靠的,但更強烈地認爲對於可操作的<>運算符沒有替代。所以是的,這是「不可能得到的是使用<>和使用不同運算符的更多SARGable查詢的錯誤查詢的示例」。 – 2013-03-18 17:55:04

+0

現在好了,這是一個很好的答案,我認爲,除非有人真的能夠提供一個例子。謝謝。我仍然想知道爲什麼你不''想''是SARGable,因爲問題的關鍵部分是我可以肯定知道的。 – KevinPaul 2013-03-18 17:57:25

回答

6

操作<>是優化搜索,但根據您比較它可能沒有多大幫助,這是。

編號:http://en.wikipedia.org/wiki/Sargable

「優化搜索運營商很少提高性能:<>,IN,OR,NOT IN, NOT EXISTS,而不是像」

=操作員更由於數據庫可以從索引中查找單個或有限數量的記錄,因此可能會提供良好的性能。當您使用<>運算符時,數據庫通常必須掃描整個索引以獲取相關記錄。

一個查詢,其中數據庫可以使用<>運算符對索引進行一些使用,如果它是一個非唯一索引,並且列中只有很少不同的值,那麼可以使用索引來刪除很多記錄,不只是一個或幾個記錄。

+0

相信所以這個人是錯的? http://ask.sqlservercentral.com/questions/1178/definition-of-sargable.html我也看到有人說維基百科的文章是錯誤的.. – KevinPaul 2013-03-18 18:07:09

+1

@IQtheMC:運算符'<>'絕對是SARGable,因爲數據庫可以利用索引排序的事實。與數據庫可以從索引末尾查找'>'運算符的項目一樣,它可以從'<>'運算符的索引的開始和結尾查找項目。但是,除非條件消除了大量記錄,否則數據庫將會掃描大部分索引,因此增益通常非常小。 – Guffa 2013-03-18 18:21:14

+0

甜蜜,一個明確的答案和解釋。謝謝。我想我現在明白如何處理這些問題,如果你是對的,你的解釋是有道理的,所以我認爲你是對的。 – KevinPaul 2013-03-18 18:27:11

0

維基百科說,這是一個優化搜索運營商很少提高性能

優化搜索運算符:=,>,<,> =,< =,BETWEEN,就像沒有領導%

優化搜索運營商很少提高性能:<>,IN,OR,NOT IN,

NOT EXISTS,而不是像非優化搜索operato RS:LIKE與領先%

http://en.wikipedia.org/wiki/Sargable

+0

很難知道誰看到這個http://ask.sqlservercentral.com/questions/1178/definition-of-sargable.html – KevinPaul 2013-03-18 18:06:24

相關問題