开发者

SQL Server 'In' Statement Item Order for Performance

Given the SQL Statement:

SELECT * 
FROM MY_TABLE
WHERE SomeNumberField in (0,99999)

If I can guarantee that the majority of rows in MY_TABLE have SomeNumberField set to 99999, and can project that this will remain the case indefinately, is it better to write the above query like this:

SELECT * 
FROM MY_TABL开发者_如何学GoE
WHERE SomeNumberField in (99999,0)


If you have an index on SomeNumberField, then this statement will be either just split into two range scans on the index, or processed as a TABLE SCAN / CLUSTERED INDEX SCAN with a filter.

The latter is more probable, provided that the majority of your rows have SomeNumberField = 999999

The range scans will always be performed in the index order, regardless of the constants order in the IN predicate.

Filter comparison time is negligible compared to the time required to fetch the data pages.


This kind of optimization can be done automatically by the SQL optimizer provided you gather some statistics that are used by the optimizer. You can use tools provided by the database vendor for this task. For SQL server refer to the following article on MSDN: http://msdn.microsoft.com/en-us/library/cc966419.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜