目的:记录FORCE的使用
初始sql:
SELECT
count(*)
FROM
`user` a
WHERE
a.type = 6
AND a.regist_time LIKE CONCAT('2019-12-17', '%')
explain上述sql发现使用了字段【type】的索引。但目的是想使用【regist_time】的索引
于是: 尝试使用FORCE INDEX
SELECT
count(*)
FROM
`user` a
FORCE INDEX (`registtime`)
WHERE
a.type = 6
AND a.regist_time LIKE CONCAT('2019-12-17', '%')
explain上述sql发现进行了全表扫描,未使用索引
SELECT
count(*)
FROM
`user` a
WHERE
a.regist_time LIKE CONCAT('2019-12-17', '%')
可以使用索引registtime,级别是【index】
又于是:
SELECT
count(*)
FROM
`user` a
FORCE INDEX (`registtime`, `type`)
WHERE
a.type = 6
AND a.regist_time LIKE CONCAT('2019-12-17', '%')
explain上述sql发现使用了字段【type】的索引,仍未使用【regist_time】的索引
注:可以考虑使用IGNORE INDEX(`type`),忽略其余索引的干扰
终版: 修改sql语句,如下
SELECT
count(*)
FROM
`user` a
WHERE
a.type = 6
AND a.regist_time >= CONCAT('2019-12-17', ' 00:00:00')
不使用FORCE和IGNORE,只是修改了sql语句
思考: 基础知识的遗忘……