如果我在 (a, b) 上有一个复合索引,我知道仅与“a”相关的查询仍将使用复合索引(但与“b”相关的查询不会)
我的问题是,如果我有 (a, b) 索引,是否有任何正当理由在 'a' 上建立单列索引?我读到的内容对于 (a,b) 索引是否完全替代 a,或者仅仅是“总比没有好”索引似乎很模糊。
这假设我同时按 a 和 a,b 进行过滤。我有一个表,其中包含太多索引,这会损害写入性能,并且希望在删除我相当确定没有任何好处的索引之前仔细检查。
另外,这个答案是否会根据我使用的是 InnoDb 还是 MyISAM 而改变?涉及的表是MyISAM,但我们大多数表是InnoDb。
您的 (a,b) 索引还将处理仅涉及“a”的查询,并且不需要单独对 (a) 建立索引。
From 文档 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html:
如果表有多列
索引,任何最左边的前缀
优化器可以使用索引来
查找行。
例如,如果您有一个
(col1, col2,
col3),您已索引搜索
(col1)、(col1、col2)、的功能
和(列 1、列 2、列 3)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)