业务请求的日志在数据库中储存,当数据量大的时候排查问题会比较吃力,因为created_at 没有加索引去查会全表扫描

没加索引

EXPLAIN SELECT * FROM `curl_request_log` WHERE  2022-12-16 and `url` = 'meituanwaimai'

mysql 时间加索引加速查询_数据库

加索引

ALTER TABLE `curl_request_log`
ADD INDEX `time` (`created_at`) USING BTREE ;

同样的sql查询:

EXPLAIN SELECT * FROM `curl_request_log` WHERE  2022-12-16 and `url` = 'meituanwaimai'

mysql 时间加索引加速查询_数据库


还是一样是全表扫描

其实在查询的时候,时间是以我们字符串的形式去查询的,无形中数据库的数据类型也要转化成我们查询的格式,所以会导致全表扫描

解决

加个字符转化就可以了

EXPLAIN SELECT * FROM `curl_request_log` WHERE  created_at > str_to_date('2022-12-16 H:i:s', '%Y-%m-%d') and `url` = 'meituanwaimai'

mysql 时间加索引加速查询_数据库_03