索引mysql数据库的电子邮件列会加快搜索结果的速度吗?

时间:2014-10-01 20:29:02

标签: php mysql indexing

我有一个庞大的mySQL数据库,它不断执行SELECT语句,搜索唯一的电子邮件地址。索引电子邮件列会加快返回的结果吗?索引此类列是否有任何特定的优点和缺点?

谢谢!

4 个答案:

答案 0 :(得分:4)

优点:

  1. SELECT ... FROM table WHERE email = 'foo@bar.com';是的。
  2. SELECT ... FROM table WHERE email LIKE 'foo@bar.com';是的。
  3. SELECT ... FROM table WHERE email LIKE 'foo@%';是的。
  4. SELECT ... FROM table WHERE email LIKE '%@bar.com'; 否。
  5. 字符串索引从左到右匹配,您可以使用通配符字符串的 end 并仍使用索引,但不能使用索引。

    缺点:

    注意:这些不是避免将索引放在必要列上的原因,而是避免不必要地索引所有内容。

    • 每次插入一行时,都需要再进行一次计算。
    • 索引会占用磁盘空间和内存空间。
    • 字符串索引具有长度,例如。他们只考虑前X个字节。默认情况下,这是的整个长度,如果您不断计算大字符串列上的索引,这会给您的CPU带来压力。

答案 1 :(得分:1)

假设电子邮件列的VARCHAR类型限制在一定的合理数量范围内,最好尝试在备份服务器上对其进行索引,然后针对您的实时服务器针对指标进行测试。你应该能够清楚地看到好处。

如果你经常INSERT / UPDATE / DELETE-ing因为必须在任何类型的数据修改上更新索引,那么这些缺点就会发挥作用(即,在维护索引时会遇到一些障碍) 。但是,如果你做的阅读比写作更多,那么这似乎可以忽略不计。读取的执行速度往往比写入速度慢得多。

此外,磁盘空间使用量也有所增加,但在这个不断扩展的存储设备的新时代,这一问题并不会成为一个大问题。

答案 2 :(得分:0)

“唯一”索引会多次加快搜索速度,并保证表中的所有值都是唯一的。 无论如何,请查看EXPLAIN语句以了解是否可以优化查询。

答案 3 :(得分:0)

我已经回答了一些与你有关的问题。我给你一些关于这个主题的链接:

Punch line:如果您在列上执行频繁搜索,那么在该列上定义索引是一个好主意(甚至可能是必要的)。正如Dagon在他的评论中提到的那样,索引在您的硬盘中占据了一席之地......但我认为这是一个公平的代价。

您可能希望看一下: