mysql中like是否使用索引
程序员文章站
2022-06-02 19:36:18
...
一.测试数据
CREATE TABLE `test_orderdetail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) DEFAULT NULL,
`product_name` varchar(100) DEFAULT NULL,
`cnt` int(11) DEFAULT NULL,
`create_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_orderid_productname` (`product_name`,`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8
注意:复合索引要注意索引前导列,否则可能导致索引不能生效
1、在使用like的时候,如果使用‘%%’,会不会用到索引呢?
EXPLAIN SELECT * FROM `test_orderdetail` WHERE product_name LIKE '%c%'
这种情况下,like时是没有使用到索引,进行了全表扫描
2、在使用like的时候,如果使用‘%’,会不会用到索引呢?
(1)、%在前面
EXPLAIN SELECT * FROM `test_orderdetail` WHERE product_name LIKE '%c'
%在前的这种情况也是进行全表扫描,索引没有生效
(2)、%在后面
EXPLAIN SELECT * FROM `test_orderdetail` WHERE product_name LIKE 'c%'
%在后面这种情况,可以看到索引生效了
总结:mysql在使用like时,只有%在后面时,索引才会生效