gpt4 book ai didi

如果使用 ORDER BY 字符串列,MySQL 查询需要很长时间才能执行

转载 作者:行者123 更新时间:2023-11-29 23:38:43 25 4
gpt4 key购买 nike

因此,如果我不使用 order by,我对包含 400 万 记录的表的查询会立即执行。不过,我想为我的客户提供一种按 Name 字段对结果进行排序的方法,并且仅显示过滤结果的最后 100 。一旦我添加order by Name,执行就需要 100 秒。

我的表结构与此类似:

CREATE TABLE Test(
ID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100),
StatusID INT,
KEY (StatusID), <-- Index on StatusID
KEY (StatusID, Name) <-- Index on StatusID, Name
KEY(Name) <-- Index on Name
);

我的查询只是执行以下操作:

explain SELECT ID, StatusID, Name
FROM Test
WHERE StatusID = 113
ORDER BY Name DESC
LIMIT 0, 100

上面解释了当我按Name订购时给出的结果:

enter image description here

StatusID_2StatausID, Name 的复合索引

现在,如果我将 ORDER BY Name DESC 更改为 ORDER BY ID 我会得到: enter image description here

如何才能使其在使用 ORDER BY Name 时仅检查 100 行?

最佳答案

您可以尝试一件事,尝试查找结果中预期位于 100 行的字母

SELECT *
FROM Test
*** Some Joins to filter data or get more columns from other tables
WHERE StatusID = 12 AND NAME REGEXP '^[A-H]'
ORDER BY Name DESC
LIMIT 0, 100

此外,使用索引对于名称(已应用)非常重要 - 在这种情况下,一旦生成所需的行数,就会启动索引范围扫描并停止查询执行。

所以我们不能无用地使用ID,因为当它达到极限时它不会扫描,我们唯一可以尝试的就是删除在预期结果中不可能的字母,这就是我们正在尝试做的使用正则表达式

关于如果使用 ORDER BY 字符串列,MySQL 查询需要很长时间才能执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26288213/

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