22,210
社区成员
发帖
与我相关
我的任务
分享
like '电子%' 是可以有效使用索引的。
substring是肯定不能有效使用索引的。
楼主只所以有这个问题,原因有两种:
一种是以"电子"开头的数据占总记录的比率过多,使用索引成本不一定比全表扫描快。
另一种原因是正常的,那就是:
like '电子%' 使用到了Name 非聚集索引,这时如果是Select [ID],[Name]或是Select [ID]或是Select [name]都会很快。
但是如果再多select一个其它字段,比如Select [ID],[Name],[Address],这样的话,先前通过索引Name找到的数据,会根据索引叶子层每条数据对应的聚集索引键(ID)再去"ID 主键,聚集索引 "寻找Address字段值,所以这时就要花费多余的时间了。
这就是为什么
Select [ID] From [Company] Where [Name] Like '电子%' --0秒
Select [ID],[Name] From [Company] Where [Name] Like '电子%' --0秒
比较快,而
Select [ID],[Name],[Address] From [Company] Where [Name] Like '电子%' -- 22 秒
就比较慢一点的原因。
--try
Select [ID],[Name],[Address] From [Company] Where left([Name],2)='电子'
where substring([Name],1,2)='电子' 也不会使用Where [Name] Like '电子%' --
因为一旦使用like 那么索引就失去了价值