首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么提高like查询的速度

2012-03-23 
如何提高like查询的速度?用户表名:users字段名:userid,username,password,groupid公司表名:company字段名:

如何提高like查询的速度?
用户表名:users
字段名:userid,username,password,groupid

公司表名:company
字段名:companyid,companyname,userid(对应users表中的userid字段)

现在要查询公司名称中包含XX的公司信息,并按groupid降序,并对查询结果分页
Select * FROM (
  select ROW_NUMBER() Over(order by groupid_id desc) as rowId,* from company c,users u where u.userid=c.userid and companyname like '%xx%'
) as mytable
where rowId between 10 and 20

由于这两张表中数据大约在10W左右,我上面的语句查询一下,花了150秒左右,太慢了。大家这样的模糊查询通常是如何提高查询的速度的


[解决办法]
一样还是可以在comanyname上加索引 虽然走的是 scan 但是还是可以增加点速度。
[解决办法]
公司名不要那样like吧!前台设计的时候给个下拉,公司名让选,SQL直接写为 =
[解决办法]
like 'xx%' 能用索引.

like '%xx%' 不能用索引
like '%xx' 不能用索引

[解决办法]
有二种方案
第一种就是在前台选择的时候去模糊查询出公司名字,到时候查询的时候做为死参数传进去,
第二种如果非要这样的话直接加索引及优化SQL比如
Select mytable.username,mytable.companyname FROM (
select ROW_NUMBER() Over(order by groupid_id desc) as rowId, u.userid,c.userid,u. username,c.companyname ,u. groupid from company c,users u where u.userid=c.userid and companyname like 'xx%'
) as mytable
where rowId between 10 and 20

减少了几个字段的查询。
尽量用左完全匹配吧,大部分的模糊查询还是做个小的限制是可以接受的。

热点排行
Bad Request.