gpt4 book ai didi

MySQL在没有足够结果时按时间限制查询

转载 作者:行者123 更新时间:2023-11-29 23:24:52 26 4
gpt4 key购买 nike

我有一个大表,有 670k 行,我正在运行一个带有很多 WHERE 的 SELECT 来搜索和过滤有用的结果,问题是有时所选过滤器没有结果,并且查询只是全部在表格上,需要很长时间,如果在 30 秒内没有找到结果,我想停止查询。

这是我的查询:

SELECT date, s.name, l.id, l.title,ratingsum,numvotes,keyword,tag 
from news_links l
LEFT JOIN sources s on s.id = l.source
WHERE
l.date BETWEEN STR_TO_DATE(?,'%Y-%m-%d')
AND STR_TO_DATE(?,'%Y-%m-%d')
AND s.name like ?
AND ((numvotes-1) *?) <= l.ratingsum
AND numvotes > ?
AND matches = 1
AND tag >= ?
AND tag <= ?
AND (l.title like ? or l.keyword like ?)
AND category >= ?
AND category <= ?
order by date desc
limit ?,15

我尝试运行子查询而不是加入,但它并没有加快查询速度。

新闻表(64万行)-----------+--------------+-----+-----+-------- --+----------------+
|领域|类型 |空|关键|默认 |额外 |
+------------+--------------+------+-----+--------- +----------------+
|编号 |整数(11)|否 |大学|空 |自动增量 |
|链接 | varchar(450) | varchar(450) |否 |优先原则 |空 | |
|日期 |日期时间 |否 |乘法 |空 | |
|标题 | varchar(145) | varchar(145) |否 |乘法 |空 | |
|来源 |整数(11)|否 |乘法 |空 | |
|文字|中文本 |是 | |空 | |
|票数 |整数(3) |否 |乘法 | 0 | |
|收视率 |整数(3) |否 | | 0 | |
|比赛|整数(1)|否 | | 0 | |
|关键词| varchar(45) | varchar(45) |是 | |空 | |
|标签|整数(1)|否 | | 0 | |
+------------+--------------+------+-----+--------- +----------------+

我在日期、标题、来源、票数以及链接上的主键上设置了索引

最佳答案

670k 行在 MySQL 中应该运行得非常快。您应该仔细查看您的指数。开始在 news_links.sourcenews_links.matches 上添加组合 HASH 索引:

ALTER TABLE news_links ADD INDEX myIdx1 USING HASH (source, matches)

EXPLAIN SELECT ... 为您提供了什么?

之后,您可以尝试通过在索引中包含更多信息来进一步提高性能(请注意,MySQL 每个表仅使用一个索引)。添加 BTREE 索引:

ALTER TABLE news_links ADD INDEX myIdx2 USING BTREE (source, matches, `date`)

BTREE 适用于范围查询(例如,其中包含 BETWEEN)。 HASH 适用于相等/不相等的条件。如果要对具有混合条件(范围相等)的多个列建立索引,请使用 BTREE

EXPLAIN SELECT ... 现在为您提供什么?

关于MySQL在没有足够结果时按时间限制查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com