gpt4 book ai didi

mysql - 单列或复合索引

转载 作者:行者123 更新时间:2023-11-29 03:21:40 25 4
gpt4 key购买 nike

对于像这样的表

[  col1   -   col2   -   col3   -   col4 ]
[ 1 - 2 - 3 - 4 ]

我将在两种情况下使用两种类型的查询

一个是SELECT * FROM table WHERE col1 = 1 AND col2 = 2 AND col3 = 3;

另一个是SELECT * FROM table WHERE col1 = 1 AND col2 = 2 AND col4 = 4;

在这种情况下,我做一个

复合索引仅用于col1 AND col2单列索引用于col3 AND col4

还是我去

ALL单列索引

或放置

ALL 复合索引中的列

附带问题:我必须为索引命名吗?什么是索引大小?

最佳答案

有这两个:

INDEX col123 (col1, col2, col3),
INDEX col214 (col2, col1, col4)

注意事项:

  • 对于给定的 2 个查询,3 列在复合查询中的顺序无关紧要。
  • 我以不同的顺序执行了 col1 和 col2,以防某些其他查询需要 col2 而没有 col1
  • INDEX(col3)(单列)用处不大。
  • 使用 INDEX(col1, col2), INDEX(col3) -- 优化器将选择一个索引而不使用另一个。这不如拥有包含所有三列的索引好。
  • 卢克很好; my index cookbook可能会更好?
  • “经验法则”是针对 Postgres 的。不要使用它们; MySQL 有太多不正确的地方。
  • “查询调优”链接针对的是 DB2;它大部分适用于 MySQL。
  • INSERTs 确实需要一点时间来更新索引,但对于非 UNIQUE 索引,大部分工作都会延迟(请参阅“更改缓冲”)。不要让它阻止您添加索引。 SELECT 的好处通常 远远超过 INSERT 的成本。
  • 索引名称在 MySQL 中是可选的,但复合索引的默认值可能会产生误导。

另一种比较查询和/或索引的方法,即使行数太少也无法获得可靠的时间:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

大数字=坏;小数字 = 微笑。

关于mysql - 单列或复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43496067/

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