【发布时间】:2021-06-01 17:04:38
【问题描述】:
表结构如下。
CREATE TABLE `log` (
`id` BIGINT(20) NOT NULL,
`name` VARCHAR(66) NULL DEFAULT NULL,
`insert_date` DATETIME(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `name` (`name`),
INDEX `insert_date` (`insert_date`)
);
原查询如下。
SELECT *
FROM log AS irl
WHERE irl.name IN (
'abc', 'bcd', 'etc' ....
/* Less than 10,000 and can be imported from other tables using subqueries. */
)
AND irl.insert_date >= @START_DATE
AND irl.insert_date <= @END_DATE;
日志表的行数至少为1000万,可以以十亿为单位。
原来的查询太慢了。
如果有好的方法,请介绍一下。
【问题讨论】:
-
写一个存储过程。首先将 agent_key 插入到虚拟表中,然后使用该表重写查询。
-
@yusufhayırsever 抱歉,这是一种类型。我只是重写了它
-
“使用子查询从其他表导入” - 将两个查询合并在一起可能会更快。
标签: mysql datetime mariadb query-optimization