日期:2014-05-18  浏览次数:20453 次

如何提高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

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