【发布时间】:2019-08-28 01:21:41
【问题描述】:
我有 3 张桌子。所有 3 个表都有大约 200 万行。每天输入 10,000-100,000 个新条目。完成下面的 sql 语句大约需要 10 秒。有没有办法让这条sql语句更快?
SELECT customers.name
FROM customers
INNER JOIN hotels ON hotels.cus_id = customers.cus_id
INNER JOIN bookings ON bookings.book_id = customers.book_id
WHERE customers.gender = 0 AND
customers.cus_id = 3
LIMIT 25 OFFSET 1;
当然,这个语句可以正常工作,但是速度很慢。有没有更好的方法来编写这段代码?
【问题讨论】:
-
在两个表中添加索引并重试,按时跟踪或参考此 [stackoverflow.com/questions/2955459/what-is-an-index-in-sql]
-
@M.Hemant 子查询是否也有助于它变得更快?
-
我觉得“hotels”表有一个 cust_id 有点奇怪。期望在预订表中为客户提供索引 FK。
-
@LukStorms 这只是我想到的一个简单示例。这不是我的实际桌子(也不是关于酒店的)。我的实际表在需要的地方有适当的 FK 和 PK。我只是想让问题尽可能简单和最小化。这些列只是为了使问题最小化。
-
EXPLAIN的输出在哪里?你的innodb_buffer_pool_size的价值是多少?你有多少内存?硬盘呢? HDD 的品牌/型号/IOPS/带宽是多少?这是 I/O 绑定查询的一个明显案例,基本前提是增加 MySQL 可以利用的内存。使用EXPLAIN查看优化器的作用以及是否可以索引字段以帮助查询。