【问题标题】:manipulating 15+ million records in mysql with php?用 php 在 mysql 中操作 15+ 百万条记录?
【发布时间】:2011-01-04 05:45:31
【问题描述】:

我有一个包含 15+ 百万条记录的用户表,在执行注册功能时,我希望检查用户名是否已经存在。我为用户名列建立了索引,当我运行查询“select count(uid) from users where username='webdev'",.hmmm,它继续加载空白屏幕终于挂断了。我在我的本地主机中使用 php 5 和 mysql 5 执行此操作。所以建议我一些技术处理这种情况。

mongodb 是不是在我们的本地机器上处理这个进程的好选择?

谢谢, 尼西语。

【问题讨论】:

  • 我不太明白你的错误,但你有关于“用户名”的索引吗......这肯定会有所帮助:)
  • 运行此查询,然后使用结果编辑问题:explain select count(uid) from users where username='webdev'
  • 作为参考,我们有一个包含超过 4000 万行的用户表,每次注册时我们都会执行几乎相同的查询。在正确索引、正确设计的表上,查询应该花费几分之一秒。
  • 一个选择是非常没用的,它不能保证任何唯一性。您需要一个唯一约束(也称为唯一索引)。
  • 你们在本地主机上检查了这个查询吗,现在有点好,但是如果我再比较一个字段 AGE 和用户名,然后再次挂断:(

标签: php mysql mongodb rdbms database


【解决方案1】:

如果您只想检查它是否存在,请尽量不要使用count。只是一个简单的select username from users where username='webdev' LIMIT 1 可能会更快。

另外,将列类型更改为varchar(如果还没有的话)。不要用户text 输入。它要慢得多。

【讨论】:

  • 不是真的,count(*) or count(username) 不会减慢速度
  • @ajreal,但LIMIT 1 可以加快速度:)
  • @ajreal,是的,但是 OP 写道,“我希望检查用户名是否已经存在”。就此而言,使用LIMIT 1 进行检查就可以了。不是吗?如果我在这里遗漏了什么,请纠正我。
  • @shamittomar - 1. 计数并不慢,但 count(uid) 可能会减慢 2. 限制不比 @ 更好987654328@ 3. 具有适当的定义索引,count=constant
  • @shamittomar:嗯。如果硬盘没有问题,我相信在这种情况下使用 char 比使用 varchar 更好。我也运行一个类似的网站,用户名通常不会超过 40 个字符,也几乎不会超过 25-30 个字符。所以我建议做的是为用户名 feild 设置 40 个字符或其他字符的限制(或找到现在存在的最高值)并将列类型更改为 char() .. 为什么这是因为如果使用 varchar 指针校验前需要计算每个用户名的长度。
【解决方案2】:

这可能是一个有争议的问题,但为了测试并查看用户名是否已经存在,我会发出以下查询(对 shamittomar 的查询稍作修改):

SELECT DISTINCT `username` FROM `users` WHERE `username` = 'webdev';

默认情况下,这将在“用户名”列中返回唯一的“webdev”实例;但是,如果您添加更多参数,它可能会改变您的结果。一个例子是,如果你运行

SELECT DISTINCT `user_id`, `username` FROM `users` WHERE `username` = 'webdev';

它将返回“user_id”和“username”的所有唯一组合。

【讨论】:

    【解决方案3】:

    您可以做的一件事是从 index to unique 更改用户名的索引,这将使搜索速度更快,就像 shamittomar 说的那样,在末尾添加 limit 1,即使它只有在值已经存在时才会有所帮助.

    【讨论】:

    • OP 需要唯一索引,SE​​LECT 永远无法保证任何唯一性。
    【解决方案4】:

    您的用户名是唯一的,因此您必须在查询中设置限制为 1,这样会更快

    select count(uid) from users where username='webdev' limit 1
    

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多