gpt4 book ai didi

具有更多列的表上的 MySQL 索引键

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

在我的脚本中,我有很多 SQL WHERE 子句,例如:

SELECT * FROM cars WHERE active=1 AND model='A3';
SELECT * FROM cars WHERE active=1 AND year=2017;
SELECT * FROM cars WHERE active=1 AND brand='BMW';

我在同一个表上使用不同的 SQL 子句,因为我需要不同的数据。

我想在 table 车上设置索引键,但我不知道该怎么做。我应该为每一列(事件、型号、年份、品牌)设置单独的键,还是应该为组(事件、型号和事件、年份和事件、品牌)设置键?

最佳答案

WHERE a=1 AND y='m'

最好由INDEX(a,y)任一个 顺序处理。最佳索引集是这样的几对。但是,我不建议使用多个索引。尝试将其限制为用户实际进行的查询。

INDEX(a,b,c,d):

WHERE a=1 AND b=22  -- Index is useful
WHERE a=1 AND d=44 -- Index is less useful

仅使用索引的“左列”。因此,第二种情况使用 a,但由于 b 不在 WHERE 中而停止。

您可能也想拥有 (active, year, model)。该组合适用于 active AND yearactive AND year AND model,但 active AND model(但没有年份)。

关于创建索引的更多信息:http://mysql.rjweb.org/doc.php/index_cookbook_mysql

因为 model 暗示了一个 make,所以将它们放在同一个复合索引中几乎没有用处。

year 不是很有选择性,用户可能想要一个范围的年份。这些使得很难获得关于 year 的有效索引。

你会有多少行?如果是数百万,我们需要更加努力地避免性能问题。我倾向于 this ,但这只是因为查找会更紧凑。

关于具有更多列的表上的 MySQL 索引键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48150732/

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