2015-10-06 60 views
-2

我是新来的SQL,如果我经常使用此查询表上的索引:创建多列

SELECT * FROM student WHERE key1=? AND key2=? 

我想在student创建索引,下面这两者之间的主要区别是什么?

CREATE INDEX idx_key1 on student (key1); 
CREATE INDEX idx_key2 on student (key2); 

CREATE INDEX idx_keys on student (key1, key2); 

谢谢!

+0

看看这个http://stackoverflow.com/questions/19599773/oracle-single-multicolumn-index-or-two-single-column-indexes – jarlh

+0

这可能也有帮助:http://www.techrepublic的.com /文章/索引上多列换SQL的性能/ – MusicLovingIndianGirl

回答

1

第二个(CREATE INDEX idx_keys on student (key1, key2))将返回单个索引查找(查找行)+键查找所需的所有行以获取列。

如果您创建了2个单列索引,则只能使用其中的一个索引查找。然后对于每一个返回的行,您需要一个键查找来获得另一个键并过滤结果。或者数据库引擎将简单地决定它只是做一个表扫描和过滤更快。

所以第二个对你的查询更好。