我越來越意識到提高查詢效率的重要性。關鍵是我有適當的索引等,以確保我的查詢不會佔用比真正需要的更多的IO。但是,這是一個醜陋的查詢,我不知道如何使它高效。SELECT ... WHERE值LIKE'%...%'
比方說,我有股項的表格,看起來像這樣在其最基本的形式:
CREATE TABLE StockItems (
ItemID INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
SerialNo VARCHAR (50) NOT NULL
);
現在我需要編寫一個存儲過程,將返回所有庫存物品的任何序列號匹配提供的部分序列號。下面的查詢將實現正是:
SELECT * FROM StockItems WHERE SerialNo LIKE '%' + @SearchStr + '%'
但是,當我看到一個查詢一樣,我在冷汗打破和離合器安慰我毯更緊。 SerialNo
上沒有索引,即使有索引,考慮到我正在尋找部分匹配,這也無濟於事。
有沒有辦法用更高效的查詢來實現這個任務?
恐怕沒有其他方法可以做到這一點(如果你希望它是部分匹配的話,效率會更高)。 – NickyvV
這可能會有所幫助:http://stackoverflow.com/questions/7510646/like-vs-contains-on-sql-server – Tanner
謝謝@NickyvV,我害怕那會是答案。但我仍然困惑。這當然不是一個完全不尋常的要求。現在我確定像亞馬遜這樣的大個子擁有更復雜的分佈式存儲和工作負載的服務器,但他們是如何做到的?如果我搜索部分書名,他們是否也必須瀏覽整個庫存池? –