Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 针对列创建单独的索引(该列也是复合主键的一部分)有意义吗?_Mysql_Rdbms - Fatal编程技术网

Mysql 针对列创建单独的索引(该列也是复合主键的一部分)有意义吗?

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

我使用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 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)
的索引。