我正在使用phpMyAdmin创建表,并希望将两个不同的列定义为索引。我不是要创建一个多列索引,但是phpMyAdmin会创建它们。这有什么问题吗?这些字段不直接相互关联,并且两个字段不会同时用于WHERE
子句。
考虑:
ALTER TABLE `documents` ADD INDEX (`offer_number`, `contract_number`);
和
ALTER TABLE `documents` ADD INDEX (`offer_number`);
ALTER TABLE `documents` ADD INDEX (`contract_number`);
有什么区别?
答案 0 :(得分:7)
如果索引的第一列与查询中使用的列匹配,MySQL只能使用索引。换句话说,如果您执行可以使用contract_number
上的索引的查询,则不会使用复合索引,因为contract_number
不是该键中的第一列。但是,复合索引可用于使用offer_number
的查询。
答案 1 :(得分:3)
http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
鉴于您对这些字段的看法,它们不应该是一个多列索引的一部分。
如果要在PhpMyAdmin上创建单列索引,则需要一次创建一个。