单个或复合列索引之间有什么区别?

sha*_*whu 5 mysql sql-server indexing

在任何关系数据库中,我们都可以创建提高查询速度的索引.但是创建更多索引会损害更新/插入速度,因为Db系统必须在新数据到来时更新每个索引(插入,更新,合并等)

我们用一个例子.我们可以创建一个名为index1 ADD INDEX index1(order_idASC,buyer_idASC)的索引或者我们可以创建2个索引,index2和index3 ADD INDEX index2(order_idASC)ADD INDEX index3(buyer_idASC)

在这样的查询中,从tablename中选择*,其中order_id> 100且buyer_id> 100

哪一个更快?通过使用Index1或index2和index3?

在等式的另一方面,当插入或更新时,我认为使用一个索引而不是2会快得多,但我还没有针对MySql或MSSQL服务器测试它,所以我不能这么肯定.如果有人有这方面的经验,请分享吧.

最后一件事是关于int类型的值,我认为为int类型列创建索引是不可能或不相关的,因为它不会增加查询时间,是真的吗?

Dim*_*kov 0

对于您提到的确切查询,我个人会进行查找index1(您将同时对这两个条件进行查找操作)。即使您仅进行过滤,相同的索引也应该完成这项工作order_id(因为order id是索引的第一列,所以即使您省略了买家,相同的 BTREE 结构仍然应该有帮助)。

同时,index1如果仅按过滤条件也没有多大帮助buyer_id(因为 BTREE 将首先order_id根据索引创建语句的缺失来构建)。您可能最终会使用 进行索引扫描,而在这种情况下,单独的索引仍然可以工作(应该预期会index1进行搜索)。index3