sql : select * from tbl where name like '%XX%' 如何优化, 在列name上已经建立了索引
或者 如何改写上面的这个sql,才能利用name 列的索引
LIKE '%XX%' 这种写法一般是不能用到索引的。
如果数据库是SQL Server 2005或2008的话,数据库引擎还是有可能会通过name上的索引来做查询。
如果想强制用name上的索引的话可以这么写:
SELECT *
FROM tbl WITH(INDEX(IndexName))
WHERE name LIKE '%XX%'
LIKE '%XX%' 无法用索引,只有 LIKE 'xx%' 才能用到索引。
如果你一定要模糊查询,最好使用全文索引技术。
关注中......
charIndex函数。
select * from tbl where name like '%XX%' 这种情况下,即使有索引、因为前边的‘%’所以索引是无效的,用charIndex函数应该快于like '%XX%' 这种情况下的检索。但是不明显,基本一样。
select * from tbl where charindex('xx',name)>0
在这种直接查询的sql语句中,即使优化也不会有太大的性能提升,你可以考虑用存储过程把语句放进去、这样最起码可以节省编译的过程、只能是一点点的优化了,
其他的就是在项目允许的情况下、用缓存啊、hashtable、等等来实现效率上的优化。
结论:开头和结尾都是 % ,对不起,很难优化'
同意:
>> LIKE '%XX%' 无法用索引,只有 LIKE 'xx%' 才能用到索引。
welcome to see:
30 分钟快快乐乐学 SQL Performance Tuning
http://www.cnblogs.com/WizardWu/archive/2008/10/27/1320055.html
SQL性能优化
http://www.cnblogs.com/msnadair/archive/2009/04/08/1431427.html
USE Northwind;
GO
SELECT * FROM Orders WHERE CustomerID LIKE 'D%'; --使用索引
SELECT * FROM Orders WHERE CustomerID LIKE '%D'; --不使用索引