目的:記錄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語句
思考: 基礎知識的遺忘……