gpt4 book ai didi

mysql - 优化执行内部比较的sql查询

转载 作者:行者123 更新时间:2023-12-01 00:14:37 24 4
gpt4 key购买 nike

我有以下查询,它有点昂贵(目前为 500 毫秒):

SELECT * FROM events AS e, event_dates AS ed 
WHERE e.id=ed.event_id AND ed.start >= DATE(NOW())
GROUP BY e.modified_datetime, e.id
ORDER BY e.modified_datetime DESC,e.created_datetime DESC
LIMIT 0,4

我一直在想办法加快速度,并注意到将 ed.start >= DATE(NOW()) 更改为 ed.start = DATE(NOW() ) 在 20 毫秒内运行查询。谁能帮助我加快日期比较的速度?在运行查询之前计算 DATE(NOW()) 是否有帮助??

编辑:这有帮助吗,使用 EXPLAIN 语句

BEFORE
table=event_dates
type=range
rows=25962
ref=null
extra=using where; Using temporary; Using filesort

AFTER
table=event_dates
type=ref
rows=211
ref=const
extra=Using temporary; Using filesort

最佳答案

SELECT * FROM events AS e
INNER JOIN event_dates AS ed ON (e.id=ed.event_id)
WHERE ed.start >= DATE(NOW())
GROUP BY e.modified_datetime, e.id
ORDER BY e.modified_datetime DESC,e.created_datetime DESC
LIMIT 0,4

备注

  1. 请不要使用隐式 SQL '89 语法,它是一种 SQL 反模式。
  2. 确保在联接、where、group by 和 order by 子句中使用的所有字段都有索引。
  3. 不要做select * (另一个反模式),显式声明您需要的字段。
  4. 尝试使用 InnoDB 而不是 MyISAM,InnoDB 对 select 语句有更多的优化技巧,特别是如果你只选择索引字段。
  5. 对于 MyISAM 表尝试使用 REPAIR TABLE tablename .
  6. 对于 InnoDB 这不是一个选项,但是强制表类型从 MyISAM 到 InnoDB 显然会强制完全重建表和所有索引。
  7. 分组依据隐式按 ASC 顺序对行进行排序,尝试将分组依据更改为 group by -e.modified_datetime, e.id以尽量减少 order by 所需的重新排序条款。 (不确定这一点,想知道结果)

关于mysql - 优化执行内部比较的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246337/

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