gpt4 book ai didi

mysql - 获取表中间的一行

转载 作者:行者123 更新时间:2023-11-29 08:48:00 25 4
gpt4 key购买 nike

SELECT r.*, u.username 
FROM `reservation` AS r JOIN
`users` AS u
WHERE u.id = r.user_id
AND DATE(r.bx_date) >= DATE('2012-08-22')
AND DATE(r.bx_date) <= DATE('2012-08-22')
AND r.status='1'
ORDER BY r.id desc

表预订包含500,000条记录,bx_date从2012-01-01到2013-01-01不等。 users 表中有 40,000 条记录。 bx_date 是“日期”类型。

对于上面的查询,如果我尝试像 2012-08-22 这样的日期,则需要 8 秒。但如果我尝试 2013-01-01 则需要 1 秒。

原因是什么?

最佳答案

最可能的原因是索引编制或索引维护不当。

您应该有一个索引,例如:

CREATE INDEX reservation_ndx ON reservation
(status, bx_date, user_id)

此外,如果使用 InnoDB,请尝试运行

ANALYZE TABLE reservation;

为了让系统更新表人口统计数据。

另一个可能的(但恕我直言不太可能)原因可能是表分区:

 http://dev.mysql.com/doc/refman/5.1/en/partitioning-types.html

看来预订可能会随着时间的推移逐渐被填满。

更新:我没有提到明显的原因,一个查询可能返回一百万条记录,而另一个查询立即失败,但如果你不知道 SQL 结果是什么(也许您只是运行“盲”基准测试并且仅检查执行时间),这也可能是一种可能性。 (更新更新:我刚刚读到两个查询返回相同数量的行。然后排除此原因)

关于mysql - 获取表中间的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12071094/

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