gpt4 book ai didi

使用 select 时,MySQL 在两列上建立索引

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

我在这里有一个非常蹩脚的问题,所以希望你们所有的 MySQL 专家都能帮我回答这个问题:)

我有这种类型的表:

+--------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| abc_1 | char(1) | NO | MUL | NULL | |
| abc_2 | char(2) | NO | MUL | NULL | |
| abc_3 | char(3) | NO | MUL | NULL | |
| abc_4 | char(4) | NO | MUL | NULL | |
| abc_5 | char(5) | NO | MUL | NULL | |
| abc_6 | char(6) | NO | MUL | NULL | |
| abc_7 | char(7) | NO | MUL | NULL | |
| abc_8 | char(8) | NO | MUL | NULL | |
| abc_9 | char(9) | NO | MUL | NULL | |
| abc_10 | char(10) | NO | MUL | NULL | |
+--------+------------------+------+-----+---------+-------+

此表中有大量(数百万)条记录。

所有查询如下所示:

SELECT `id` FROM `tbl` WHERE `abc_1` = 'a' LIMIT 10;
SELECT `id` FROM `tbl` WHERE `abc_2` = 'zz' LIMIT 10;
SELECT `id` FROM `tbl` WHERE `abc_3` = 'xxx' LIMIT 10;

等等。

表具有 InnoDB 引擎,abc 列的排序规则为 latin1_general_ci

所以我的问题非常简单:我应该添加哪个索引以使这些类型的查询运行得更快?

仅限单列(例如:abc_1abc_2 等),两列(例如:id AND abc_1id AND abc_2 等等)或相反顺序的两列(例如:abc_1 AND idabc_2 AND id)? p>

正如我想象的那样,最后一个变体是最好的(abc_1+id)。我可以测试和基准测试所有变体,但由于它是大表,创建新索引需要很多时间,所以我想先征求您的意见。

也许有人可以建议任何缓存技术如何更快地运行这些类型的查询,而不直接涉及 MySQL?我听说对于这种类型的查询,您可以使用 Sphinx,例如:添加 abc 列作为属性?也许有人有这方面的经验?

先谢谢大家了!

最佳答案

这些查询的最佳索引是复合索引:table(abc_1, id)table(abc_2, id)table(abc_3, id) (等等)。我相信这是你最后的选择。

这些索引“涵盖”您建议的查询。这意味着索引本身可以用于查询,而不是从数据页加载数据。

如果您始终同时发生所有这些查询,那么您需要确保有足够的内存来将索引存储在内存中。

关于使用 select 时,MySQL 在两列上建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27550912/

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