日期:2014-05-19  浏览次数:20605 次

模糊搜索中多个字段排序效率问题
id   聚合
title   非聚合
Level(等级,int)     非聚合

光是
select   Top   10   *   from   Table   where   title   like   '%   关键字   % '   order   by   id   desc
很快的

但是现按等级,在按加入时间排序就很慢了,而且cup占用到80%左右
select   Top   10   *   from   Table   where   title   like   '%   关键字   % '   order   by   level   desc,   id   desc
而且我是用存储过程写的,

不只有什么有效的办法

------解决方案--------------------
将like换成charindex()


USE pubs
GO
SELECT CHARINDEX( 'wondrous ', notes)
FROM titles
WHERE title_id= 'TC3218 '
GO

------解决方案--------------------
select Top 10 * from Table where title like '% 关键字 % ' order by id desc

select Top 10 * from Table where title like '% 关键字 % ' order by level desc, id desc

单单比较这2句,第二句速度明显慢了,应该是按照level排序造成的,看看执行计划,是不是id的聚集索引被覆盖了没有被使用,level字段建立聚集索引可以么?
------解决方案--------------------
颠倒一下呢 如果你level出现频率高 就会影响索引速度
------解决方案--------------------
你有没有在level上单独建一个索引
------解决方案--------------------
有联合索引,不过感觉这种情况没必要加索引了,level上面不必加索引
------解决方案--------------------
或是在level id,两个字段上建一个组合索引
------解决方案--------------------
create clustered index index_name on tb_name
(
level ,id
)
------解决方案--------------------
帮你顶下 偶也很关注这个问题
你试试把level索引变成level,id一组得 依然是非聚集得
------解决方案--------------------
create index ix on tb_name(title,level ,id)