我有一个表(用户),列为
id INT AUTOINVREMENT PRIMARY
uid INT index
email CHAR(128) UNIQUE
activated TINYINT
而且我需要像这样查询该表:
SELECT * FROM users WHERE uid = ? AND activated = 1
我的问题是,由于在’uid’列上设置了索引,为了获得上述查询的最佳性能,我是否还需要在’activated’列上设置另一个索引?该表(将是一个很大的表)将被’INSERT’,’UPDATE’语句以及’SELECT’语句大量访问.
正如我从其他来源了解到的那样,索引与“ INSERT”和“ UPDATE”语句相反,因此,如果uid列上的索引足以用于上述查询,则无需为“插入”设置另一个激活的索引&更新性能的缘故.
解决方法:
无论如何,MySQL每个表只会使用1个索引,因此拥有一个额外的索引将无济于事.
但是,如果您想要真正的最佳性能,请按以下顺序在两列上定义索引:(例如,两列之间有1个索引)
index_name (uid, activated)
这将允许对uid或uid AND激活的优化查找.