2013-01-09 44 views
0

我有以下查詢,我需要提高性能SQL性能取代

DECLARE @number varchar(40) = '0800001001' 
SELECT 
    Id 
FROM 
    Table1 
WHERE 
    (REPLACE(Phone1, ' ','') = @number) 
OR (REPLACE(Phone2, ' ','') = @number) 

表有50萬行,並在這些列或全文目前沒有索引。任何人都可以建議使用索引,clr函數或其他方式來改進此查詢的最佳方法嗎?

+0

所有數字都以相同的格式存儲嗎?即使他們有空間,他們也遵循相同的模式嗎?如果是這樣,那麼你可以做的第一件事是刪除REPLACE調用,並提供與空格相同格式的@number –

+0

嘗試使用** DataBase Tuning Advisor **運行此查詢。它是** SQL管理工作室**中的選項:在....中查詢\分析查詢,它會顯示你可以採取的行動的主張。這是第一步。 –

回答

1

REPLACE(Phone1, ' ',''),(REPLACE(Phone2, ' ','')創建計算列,併爲這些計算列創建索引。

+0

您甚至可能不需要創建計算列。根據所使用的SQL數據庫,您甚至可以根據替換表達式創建索引。 http://www.postgresql.org/docs/9.1/static/indexes-expressional.html –

+0

其SQL服務器08.我沒有意識到你可以索引一個計算列。將嘗試這一點,並衡量 –