首页 新闻 赞助 找找看

SQL如何优化

0
悬赏园豆:200 [已解决问题] 解决于 2009-04-09 17:00

sql :  select * from tbl where name like '%XX%' 如何优化, 在列name上已经建立了索引

或者 如何改写上面的这个sql,才能利用name 列的索引

zhdw的主页 zhdw | 初学一级 | 园豆:0
提问于:2009-04-09 13:27
< >
分享
最佳答案
0

LIKE '%XX%' 这种写法一般是不能用到索引的。

如果数据库是SQL Server 2005或2008的话,数据库引擎还是有可能会通过name上的索引来做查询。

如果想强制用name上的索引的话可以这么写:

SELECT *
FROM tbl WITH(INDEX(IndexName))
WHERE name LIKE '%XX%'

Azuresong | 老鸟四级 |园豆:3565 | 2009-04-09 13:43
其他回答(4)
0

LIKE '%XX%' 无法用索引,只有 LIKE 'xx%' 才能用到索引。

如果你一定要模糊查询,最好使用全文索引技术。

eaglet | 园豆:17139 (专家六级) | 2009-04-09 13:48
0

关注中......

超级程序员 | 园豆:220 (菜鸟二级) | 2009-04-09 14:31
0

charIndex函数。

select * from tbl where name like '%XX%'  这种情况下,即使有索引、因为前边的‘%’所以索引是无效的,用charIndex函数应该快于like '%XX%'  这种情况下的检索。但是不明显,基本一样。

select * from tbl where charindex('xx',name)>0

在这种直接查询的sql语句中,即使优化也不会有太大的性能提升,你可以考虑用存储过程把语句放进去、这样最起码可以节省编译的过程、只能是一点点的优化了,

其他的就是在项目允许的情况下、用缓存啊、hashtable、等等来实现效率上的优化。

结论:开头和结尾都是 % ,对不起,很难优化'

邢少 | 园豆:10926 (专家六级) | 2009-04-09 16:45
0

同意:
>> 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';    --不使用索引

WizardWu | 园豆:1402 (小虾三级) | 2009-04-09 17:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册