select * from table where a like 'xxx%'
与a有没有索引没有关系,like是全表搜索。
如果:
select * from table where a > xxx;
则:
效率因为索引的存在而得到提高!
与a有没有索引没有关系,like是全表搜索。
如果:
select * from table where a > xxx;
则:
效率因为索引的存在而得到提高!
如果是like 'xxx%',建索引会明显改善查询。
我做了试验,在500万条记录时,有索引与没有索引真是天壤之别,不信你试试。
MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”
即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。
另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode[2,3] >“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。
你的实验肯定没错,不过我想可能采取文中的方式会使得效率更为提高吧?!
你觉得呢?
我想说的是select * from table where a like 'xxx%'就要看你返回的数据行占总行数的多少,如果超过40%,用全表扫描就更快了。
当然这也和你的优化器有关,RBO和CBO对索引是有区别的。