gpt4 book ai didi

mysql - 查询未使用正确的索引,速度慢

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

我的应用程序中有以下查询:

SELECT a.*, f.*
FROM flights_database f
JOIN airports a ON f.airport = a.airportNameClean
WHERE f.flight_date > CURDATE()-30
AND (f.flight_number LIKE 'New York%' OR f.airport LIKE 'New York%' OR f.airline LIKE 'New York%' OR a.iata = 'New York')
ORDER by f.flight_date DESC, f.scheme DESC
LIMIT 200

执行时间太长(超过 2 秒)。我有关于航类日期、航类号、机场、航空公司和方案的索引。

尽管如此,EXPLAIN 仍报告以下内容:

1
SIMPLE
f
ALL
flight_number,airport,airline,flight_date,auto_suggest,suggest_daily,flight_search
NULL
NULL
NULL
1408614
Using where; Using filesort

1
SIMPLE
a
ref
PRIMARY,airportNameClean
airportNameClean
107
my_db.f.airport
1
Using where

我必须创建哪些索引,我缺少什么?

最佳答案

由于历史原因,MySQL 只能为每个参与表使用一个索引。在您的查询中,仅引用表 flights_databaseairports ,因此它只能使用 2 个索引。最好让它们发挥作用:)

您需要在现有的单列索引之上定义一些多列索引,并专门针对慢速查询进行微调。不必担心过多的负面性能影响,它只会减慢操作速度,并极大地增强读取操作。设置索引,以便它们首先提供最通用的过滤器(可能首先在机场上,然后再向下提供其他过滤器和排序标准。

对于flights_database,您可能需要(机场、航空公司、航类号、航类日期) 上的索引。它应该立即大大缩短查询时间。

关于mysql - 查询未使用正确的索引,速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762940/

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