簡體   English   中英

避免全表掃描

[英]Avoid full table scan

我有一個需要調整的SQL選擇查詢。 在查詢中,有一個View in from子句,該子句是通過4個表形成的。 執行此查詢時,將對所有這4個表進行全表掃描,這會導致CPU峰值。 這四個表具有有效的索引。

該查詢類似於以下內容:

SELECT DISTINCT ID, TITLE,...... 
FROM FINDSCHEDULEDTESTCASE 
WHERE STEP_PASS_INDEX = 1  AND LOWER(COMPAREANAME) ='abc'   ORDER BY ID;

點表示還有更多列。 這里FINDSCHEDULEDTESTCASE是四個表的視圖。

有人可以指導我如何避免對這四個表進行全表掃描。

無論如何使用您的條件

AND LOWER(COMPAREANAME) ='abc'

您將對COMPAREANAME值進行全面掃描,因為必須為每個值函數計算LOWER。

這取決於很多事情!

SELECT DISTINCTG ID, TITLE, ......

根據您選擇的列數,SQL Server可能決定執行表掃描而不使用索引。

另外,根據您的“ WHERE”條件,SQL Server還可以決定執行表掃描而不是使用索引。

您正在使用哪個版本的SQL Server?

可以有辦法改善表上的索引,如果,例如,在“WHERE”代表行的不到50%,如果你使用的是SQL 2008(帶過濾索引條件的http:// msdn.microsoft.com/zh-CN/library/ms188783.aspx

或者,您可以在視圖上創建索引( http://msdn.microsoft.com/zh-cn/library/ms191432.aspx

您的問題中確實沒有足夠的細節能夠真正為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM