Mysql 针对列创建单独的索引(该列也是复合主键的一部分)有意义吗?
我使用MySQL作为我的RDBMS 但我认为它必须适用于其他关系数据库 我有一个表Z,其中有5列:a,b,c,d,e 列a、b、c包含一个复合主键 现在,当涉及到WHERE子句中的查询时,有时我会根据a、b、c列的值获取数据。但3列中只有一列将被设置 我需要为这些列创建3个索引吗 后续问题:如果我需要查询表中3列中2列的值,该怎么办?创建另外3个索引是否有助于加快我的查询速度?(a,b)(a,c)(b,c) 请告知。简短回答:是Mysql 针对列创建单独的索引(该列也是复合主键的一部分)有意义吗?,mysql,rdbms,Mysql,Rdbms,我使用MySQL作为我的RDBMS 但我认为它必须适用于其他关系数据库 我有一个表Z,其中有5列:a,b,c,d,e 列a、b、c包含一个复合主键 现在,当涉及到WHERE子句中的查询时,有时我会根据a、b、c列的值获取数据。但3列中只有一列将被设置 我需要为这些列创建3个索引吗 后续问题:如果我需要查询表中3列中2列的值,该怎么办?创建另外3个索引是否有助于加快我的查询速度?(a,b)(a,c)(b,c) 请告知。简短回答:是 INDEX (a, b, c) -- creates 1 ind
INDEX (a, b, c)
-- creates 1 index of unique combinations of a&b&c, not unlike CONCAT(a, b,c)
INDEX (a),
INDEX (b),
INDEX (c)
-- creates 3 indexes of unique values for all a, b, c separately
INDEX (a, b),
INDEX (c)
-- creates 2 indexes:
-- 1st for a&b unique values
-- 2nd for c unique values
后续操作:使用中的a=''.'和b=''.'.'
,通过索引(a,b)
进行搜索将比通过索引(a),索引(b)
进行搜索更快。但是,如果a
或b
值是唯一的(至少大部分是唯一的),则性能提高不会显著
调试索引性能时,请始终开始检查您以及以后查询的索引使用情况。简短回答:是
INDEX (a, b, c)
-- creates 1 index of unique combinations of a&b&c, not unlike CONCAT(a, b,c)
INDEX (a),
INDEX (b),
INDEX (c)
-- creates 3 indexes of unique values for all a, b, c separately
INDEX (a, b),
INDEX (c)
-- creates 2 indexes:
-- 1st for a&b unique values
-- 2nd for c unique values
后续操作:使用中的a=''.'和b=''.'.'
,通过索引(a,b)
进行搜索将比通过索引(a),索引(b)
进行搜索更快。但是,如果a
或b
值是唯一的(至少大部分是唯一的),则性能提高不会显著
调试索引性能时,请始终使用开始检查您的以及以后查询的索引使用情况
…将基于列a、b、c的值获取数据。但3列中只有一列将被设置
如果是这种情况,则需要三个索引:
- 如果设置了
,您的主键索引a
就足够了。您不需要为这种情况创建额外的索引(a、b、c)
- 如果设置了
,则需要索引b
,以便快速执行此查询(b)
- 如果设置了
,则需要索引c
,以便快速执行此查询(c)
a
为空时,索引(a、b、c)
不可用。请记住,null
不是一个值
…将基于列a、b、c的值获取数据。但3列中只有一列将被设置
如果是这种情况,则需要三个索引:
- 如果设置了
,您的主键索引a
就足够了。您不需要为这种情况创建额外的索引(a、b、c)
- 如果设置了
,则需要索引b
,以便快速执行此查询(b)
- 如果设置了
,则需要索引c
,以便快速执行此查询(c)
当
a
为空时,索引(a、b、c)
不可用。请记住,null
不是一个值。提供精确的查询文本。索引不是“一般”创建的。您可以基于复合主索引在上搜索。B&C可能需要额外的索引,但您必须进行测试,看看这些索引是否有所不同。B、 C将使用B索引。A、 B或A、C将使用复合主索引。在搜索/排序键的任何前缀时可以使用复合索引,因此(A、B、C)
也将充当(A、B)
和(A)
的索引。提供精确的查询文本。索引不是“一般”创建的。您可以基于复合主索引在上搜索。B&C可能需要额外的索引,但您必须进行测试,看看这些索引是否有所不同。B、 C将使用B索引。A、 B或A、C将使用复合主索引。在搜索/排序键的任何前缀时可以使用复合索引,因此(A、B、C)
也将充当(A、B)
和(A)
的索引。