业务请求的日志在数据库中储存,当数据量大的时候排查问题会比较吃力,因为created_at 没有加索引去查会全表扫描
没加索引
EXPLAIN SELECT * FROM `curl_request_log` WHERE 2022-12-16 and `url` = 'meituanwaimai'
加索引
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'
还是一样是全表扫描
其实在查询的时候,时间是以我们字符串的形式去查询的,无形中数据库的数据类型也要转化成我们查询的格式,所以会导致全表扫描
解决
加个字符转化就可以了
EXPLAIN SELECT * FROM `curl_request_log` WHERE created_at > str_to_date('2022-12-16 H:i:s', '%Y-%m-%d') and `url` = 'meituanwaimai'