【问题标题】:Searching for a single in a SQL database在 SQL 数据库中搜索单曲
【发布时间】:2017-07-25 15:51:14
【问题描述】:

我是 mySQL 和 PHP 的新手,遇到了性能问题。 我有一个具有不同唯一 ID 的数据库,我想从 5000 多行中提取几行(从数组中)。到目前为止我想出的最佳解决方案是使用:

SELECT * FROM `table` WHERE id IN ($idArray);

有没有更有效的方法来做到这一点? 'table' 中的 'id' 是一个唯一的字符串。

【问题讨论】:

  • 为什么是 ids 字符串?
  • 如果 ids 唯一的 - 因为它们在数据库中有唯一的索引(PRIMARYUNIQUE),那么,只有 5000 条记录,那应该是快到 s --- 铲子!
  • 这将达到尽可能高效,只需确保您在 id 字段上有一个索引。
  • 像这样将变量传递给您的查询会使您容易受到SQL Injection的攻击
  • ID 是 Facebook 用户 ID,它们是大约 15 个字符的数字字符串,可以给予或接受。我将数据库用作排行榜,更具体地说,我想提取所有用户朋友(及其 id)的分数(每个用户约 4 个列)。在这一点上,我只测试了来自 5000 名总用户的约 10 人,是自行生成的,但实际上它可能是超过 50k 总用户中的数百人。这仍然有效吗?如果我还没有偏离主题,你认为有更好的方法来做我想做的事吗?谢谢。

标签: php mysql performance


【解决方案1】:

我已经看到 IN 列表中的 70,000 个号码“反应迟缓”。

部分问题在于索引。你的table 需要INDEX(id)(或者,更好的是PRIMARY KEY(id))。

部分问题在于缓存。如果table 小到可以放入buffer_pool,并且缓存是温暖的,那么它更像是从铲子上掉下来的温暖潮湿的东西。

但是...如果您的“数组”已经在表格中,那么只需 JOIN 到该表格即可。那可能会更快。 OTOH,仅为此目的构建表可能会更慢。

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多