我有一个庞大的mySQL数据库,它不断执行SELECT语句,搜索唯一的电子邮件地址。索引电子邮件列会加快返回的结果吗?索引此类列是否有任何特定的优点和缺点?
谢谢!
答案 0 :(得分:4)
SELECT ... FROM table WHERE email = 'foo@bar.com';
是的。SELECT ... FROM table WHERE email LIKE 'foo@bar.com';
是的。SELECT ... FROM table WHERE email LIKE 'foo@%';
是的。SELECT ... FROM table WHERE email LIKE '%@bar.com';
否。 字符串索引从左到右匹配,您可以使用通配符字符串的 end 并仍使用索引,但不能使用索引。
注意:这些不是避免将索引放在必要列上的原因,而是避免不必要地索引所有内容。
答案 1 :(得分:1)
假设电子邮件列的VARCHAR类型限制在一定的合理数量范围内,最好尝试在备份服务器上对其进行索引,然后针对您的实时服务器针对指标进行测试。你应该能够清楚地看到好处。
如果你经常INSERT / UPDATE / DELETE-ing因为必须在任何类型的数据修改上更新索引,那么这些缺点就会发挥作用(即,在维护索引时会遇到一些障碍) 。但是,如果你做的阅读比写作更多,那么这似乎可以忽略不计。读取的执行速度往往比写入速度慢得多。
此外,磁盘空间使用量也有所增加,但在这个不断扩展的存储设备的新时代,这一问题并不会成为一个大问题。
答案 2 :(得分:0)
“唯一”索引会多次加快搜索速度,并保证表中的所有值都是唯一的。 无论如何,请查看EXPLAIN语句以了解是否可以优化查询。
答案 3 :(得分:0)
我已经回答了一些与你有关的问题。我给你一些关于这个主题的链接:
Punch line:如果您在列上执行频繁搜索,那么在该列上定义索引是一个好主意(甚至可能是必要的)。正如Dagon在他的评论中提到的那样,索引在您的硬盘中占据了一席之地......但我认为这是一个公平的代价。
您可能希望看一下: