我对如何最好地在 MySQL 中为表建立索引感到困惑,并且需要有关要使用的最佳索引构造类型的帮助。目前我在这个表上使用唯一键索引,但不知道这是否是最好的使用方法,在某些情况下,由于 MySQL 的限制,我不能使用这种类型的索引。
该表由一个主键和 n 列组成,在这种情况下保持简单 n=4。所以表格看起来像这样:pk, col1, col2, col3, col4
col1-n 中的值是 VARCHAR,通常长度在 1 到 4 个字符之间。主键是 col 值的串联。所以典型的行可能如下所示:
A:B:C:D, A, B, C, D
A:B:C:E, A, B, C, E
A:B:F:F, A, B, F, F
其中第一个元素是主键,后续元素是 col1、col2 等。
该表需要针对查询而不是插入进行优化。我希望执行的查询将有一个 WHERE 子句,我们知道第 1-4 列中的一些值。因此,例如,我可能想查找第二列为“B”或“C”的所有行。一旦我有了主键,我就用它来加入另一个表。
我在 col1-4 上创建了一个唯一键(因为它们是唯一的)。问题是,一旦 n 变大(>16),我就不能再创建唯一键索引(MySQL 被限制为 16 列用于唯一键约束)。这不是问题,因为主键可确保唯一性。但是,我不确定两件事:
a) 为了优化查询速度,唯一键是一个很好的索引吗?
b) 当我不能使用唯一键时,我应该使用什么索引?
我有以下选项,但我不确定哪个(如果有)是最好的:
a) 在 (col1, col2, col3, col4) 上创建单个索引
b) 每列创建一个索引 (col1), (col2)…(col-n)
c) 为每个 col 创建一个索引,其中包含的 pk (pk, col1), (pk, col2), (pk, col-n)
非常感谢您提供的任何帮助。
谢谢
菲尔