Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
Sql 多列上的索引顺序_Sql_Database - Fatal编程技术网

Sql 多列上的索引顺序

Sql 多列上的索引顺序,sql,database,Sql,Database,这只是一个简单的问题,但当索引跨越多个列时,它的顺序是否重要 例如,以查询为例: SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 从my_表中选择*,其中(列_1=1和列_2=2) 如果我想为这样的查询添加索引,如果我的索引是这样创建的,这有关系吗: CREATE INDEX my_index ON my_table (column_1, column_2) CREATE INDEX my_index ON my_tabl

这只是一个简单的问题,但当索引跨越多个列时,它的顺序是否重要

例如,以查询为例:

SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 从my_表中选择*,其中(列_1=1和列_2=2) 如果我想为这样的查询添加索引,如果我的索引是这样创建的,这有关系吗:

CREATE INDEX my_index ON my_table (column_1, column_2) CREATE INDEX my_index ON my_table (column_2, column_1) 创建索引我的索引 在my_表上(列_1,列_2) 或者像这样:

CREATE INDEX my_index ON my_table (column_1, column_2) CREATE INDEX my_index ON my_table (column_2, column_1) 创建索引我的索引 在my_表上(列_2,列_1)
谢谢你的帮助

在您给出的示例中,列顺序并不重要

如果你在一列上下订单,那就很重要了;
(col1,col2)
上的索引可用于
按col1,col2排序,但不能用于
按col2,col1排序


对于
WHERE
子句,
(col1,col2)
上的索引适用于
其中col1=1和col2=1
。它也适用于col1=1的
。但是它不能帮助
,其中col2=1

这应该给你一个好主意


这样的情况还有很多。

最好的办法是测量它。尝试其中一个,测量性能,然后删除该索引,然后尝试另一个。通常,您希望一起查询的数据在磁盘上的索引中靠得很近,并且索引中列的顺序会影响索引在磁盘上的存储方式。很难准确地猜测哪种索引组合最有效,因此尝试几种不同的可能性并进行测量,以找出哪种最适合您的数据。

实际上,即使在这种情况下,这也很重要。如果几乎每一行都有col1=1,那么如果col2是第一个,那么索引很可能工作得更好,即使您同时查询这两个列。在提供的示例中,如果一列的电活度明显高于另一列,这也可能很重要。首先放置具有高选择性的列(许多不同的值)。此答案中的优秀信息有助于了解如何命中系统上已有的索引。
(col1,col2,col3)
适用于
其中col1=1和col2=2
?@堆栈。