日期:2014-05-17  浏览次数:20480 次

数据库170w条数据,对索引列查询较慢,求优化建议
有一个文章表(id title url body...等)
网址列 url: nvarchar(200), 建了唯一 、非聚集索引
body:ntext

现在总数据量180w,对url列进行模糊查询  select top 1 Url from [tb] where Url like '%dadas%' 。耗时11秒
  
求解决方法


------解决方案--------------------
like '%xxx%'是无法利用索引了
只能通过其他条件先缩小范围了
------解决方案--------------------
1、like '%dadas%'丢失索引。如果要改进,用全文索引
2、nvarchar这些大类型对索引的性能依赖不强,很难有什么提升。

综上所述:用全文索引
------解决方案--------------------
引用:
like '%xxx%'是无法利用索引了
只能通过其他条件先缩小范围了

是否利用索引和你的selectivity有关,和用不用like无关
------解决方案--------------------
引用:
引用:
like '%xxx%'是无法利用索引了
只能通过其他条件先缩小范围了
是否利用索引和你的selectivity有关,和用不用like无关
百分号在前面就用不了索引
------解决方案--------------------
引用:
引用:引用:
like '%xxx%'是无法利用索引了
只能通过其他条件先缩小范围了
是否利用索引和你的selectivity有关,和用不用like无关百分号在前面就用不了索引


correct
------解决方案--------------------
引用:
引用:引用:引用:
like '%xxx%'是无法利用索引了
只能通过其他条件先缩小范围了
是否利用索引和你的selectivity有关,和用不用like无关百分号在前面就用不了索引

correct

uncertainty
如果like百分号在前面就用不了索引,如果like百分号不在前面,會根據你的selectivity[选择率 = (唯一索引值的个数)/ (表中所有行数)],再做選擇是否用索引.

------解决方案--------------------
从设计角度避免使用 like '%abc%'的形式
即使要模糊查找,至少也应该是 like 'abc%'