gpt4 book ai didi

mysql - 创建索引优化慢查询

转载 作者:行者123 更新时间:2023-11-29 04:03:51 24 4
gpt4 key购买 nike

在 250,000 行的表上有一个查询花费的时间太长。我需要加快速度:

create table occurrence (
occurrence_id int(11) primary key auto_increment,
client_id varchar(16) not null,
occurrence_cod varchar(50) not null,
entry_date datetime not null,
zone varchar(8) null default null
)
;

insert into occurrence (client_id, occurrence_cod, entry_date, zone)
values
('1116', 'E401', '2011-03-28 18:44', '004'),
('1116', 'R401', '2011-03-28 17:44', '004'),
('1116', 'E401', '2011-03-28 16:44', '004'),
('1338', 'R401', '2011-03-28 14:32', '001')
;

select client_id, occurrence_cod, entry_date, zone
from occurrence o
where
occurrence_cod = 'E401'
and
entry_date = (
select max(entry_date)
from occurrence
where client_id = o.client_id
)
;
+-----------+----------------+---------------------+------+
| client_id | occurrence_cod | entry_date | zone |
+-----------+----------------+---------------------+------+
| 1116 | E401 | 2011-03-28 16:44:00 | 004 |
+-----------+----------------+---------------------+------+
1 row in set (0.00 sec)

表结构来自商业应用程序,无法更改。

优化它的最佳索引是什么?或者更好的查询?

编辑:

它是每个客户端最后一次出现的 E401 代码,并且仅当最后一次出现的是该代码时。

最佳答案

此类查询的理想索引是:

index #1: [client_id] + [entry_date]
index #2: [occurence_cod] + [entry_date]

然而,如果碰巧数据具有某些特征,则可以简化这些索引。这将节省文件空间,以及更新数据(插入/删除/更新)的时间。

如果每个 [client_id] 很少有超过一个“出现”记录,那么索引 #1 只能是 [client_id]。

以同样的方式,如果每个 [occurence_cod] 很少有超过一个“发生”记录,那么索引 #1 只能是 [occurence_cod]。

将索引 #2 变成 [entry_date] + [occurence_cod] 可能更有用。这将使您能够将索引用于仅在 [entry_date] 的条件。

问候,

关于mysql - 创建索引优化慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472645/

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