在任何关系型数据库中,我们都可以创建索引以提高查询速度。但是创建更多的索引可能会损害更新/插入速度,因为数据库系统在新数据到来时(插入、更新、合并等)必须更新每个索引。
我们举一个例子。 我们可以创建一个名为index1的索引 ADD INDEX
在这样的查询中 select * from tablename where order_id>100 and buyer_id>100
哪一个更快?使用Index1还是index2和index3?
另一方面,在插入或更新时,我认为只使用一个索引比使用2个更快,但我还没有对MySql或MSSQL服务器进行测试,所以我不能确定。如果有人在这方面有经验,请分享。
最后一件事是关于int类型的值,我认为为int类型的列创建索引不可能或不相关,因为它不会提高查询时间,这是真的吗?
我们举一个例子。 我们可以创建一个名为index1的索引 ADD INDEX
index1
(order_id
ASC, buyer_id
ASC)
或者我们可以创建两个索引,index2和index3
ADD INDEX index2
(order_id
ASC)
ADD INDEX index3
(buyer_id
ASC)在这样的查询中 select * from tablename where order_id>100 and buyer_id>100
哪一个更快?使用Index1还是index2和index3?
另一方面,在插入或更新时,我认为只使用一个索引比使用2个更快,但我还没有对MySql或MSSQL服务器进行测试,所以我不能确定。如果有人在这方面有经验,请分享。
最后一件事是关于int类型的值,我认为为int类型的列创建索引不可能或不相关,因为它不会提高查询时间,这是真的吗?
WHERE
语句的两个部分都是“范围”。因此,它不能同时使用复合键(order_id, buyer_id)的两个部分。相反,优化器可以决定order_id>100
是否更具选择性(并使用INDEX(order_id)
),或者另一个更好。 - Rick James