在查詢中我可以使用什麼來代替LIKE? 由於LIKE對搜索條件的性能影響較差。避免在SQLQueries中使用LIKE
我的情景:
SELECT
*
FROM
MetaDataTag
WHERE
Name LIKE 'SUN RCC%'
我不能使用含有作爲全文索引,需要在桌子上,這我沒有選擇了。
建議將非常有幫助。
在查詢中我可以使用什麼來代替LIKE? 由於LIKE對搜索條件的性能影響較差。避免在SQLQueries中使用LIKE
我的情景:
SELECT
*
FROM
MetaDataTag
WHERE
Name LIKE 'SUN RCC%'
我不能使用含有作爲全文索引,需要在桌子上,這我沒有選擇了。
建議將非常有幫助。
在你的特殊情況下,LIKE不是一個壞的選擇,因爲你只使用一個後綴通配符。您的查詢實際上可以使用Name
列中的索引。
看一看這種視覺的解釋,爲什麼它的工作原理:http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning
試試這個..
SELECT
*
FROM
MetaDataTag
WHERE PATINDEX('SUN RCC%', Name) != 0
你爲什麼不上某些列使用像然後在整個表'(SELECT *)'?那需要時間 –
另一種選擇是使用'CHARINDEX'(請參閱:http://technet.microsoft.com/en-us/library/ms186323.aspx)如果返回的值大於0,則它存在於字符串中。不幸的是,由於'CHARINDEX('123','1')和'CHARINDEX('123','5')都返回0,它不能確定包含的字符串是開始還是不存在。你可以通過給要比較的字符串添加一個前綴來解決這個問題,但我個人會說在這個例子中'LIKE'是一個合理的解決方案。 – talegna
另一種選擇是查看'LEFT(str)'的內容(請參閱:http://stackoverflow.com/questions/9493844/is-there-startswith-or-contains-in-t-sql-with-variables ) – talegna