Sql 多列上的索引顺序
这只是一个简单的问题,但当索引跨越多个列时,它的顺序是否重要 例如,以查询为例: 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)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
谢谢你的帮助 在您给出的示例中,列顺序并不重要 如果你在一列上下订单,那就很重要了;
(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
?@堆栈。