淡sqlserver对like '%关键词%' 处理时的索引利用问题
说法一:百分号%通配符前置会让SQL查询不走索引,改走全表扫描。这种说法很流行 结论是错误的 事实上这种说法不太准确 通配符%前置会让SQL查找索引时效率极速下降,但在大多数情况下还是会走索引(不需要全文索引,只要建一个普通的索引就可以了) ? CREATE NONCLUSTERED INDEX [Ix_索引名] ON [dbo].[wkf_表名]? 此时执行 SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title]? FROM [库名].[dbo].[wkf_database]?? where [db_title]like ‘%dba%‘? order by 1 desc 对比加索引之前:
? ?
这种说法非常片面,走索引比不走索引99%的情况下都会减少IO从而提高效率,但是:索引查找完的键匹配动作也是有一部分性能消耗的。像上面两张图所示,如果关键字很容易就匹配到了,全表扫描很快就找齐了数据,而索引扫描节省的时间不足以弥补键匹配动作所消耗时间的时候这种情况就发生了(大部分线上查询不存在这问题)这时候优化就变得诡异了。 CREATE NONCLUSTERED INDEX [Ix_索引名] ON [dbo].[wkf_表名]? 此时执行查询计划如下,清爽多了吧 ? 以上就是我现在能想到的SQLSERVER处理SELECT *? FROM TABLENAME?LIKE ?‘%关键词%‘ ? 总结: ? 1.使用模糊查询最好使用后置,前置会大大降低效率。 ? select * from T_OMS_EMPLOYEE_BASEINFOR where usernameCn like ‘%肖%‘ 2.使用全文检索,效率远远大于like (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |