gpt4 book ai didi

MySQL 在查询大量条目时速度太慢,有好的替代方案吗?

转载 作者:行者123 更新时间:2023-11-29 08:18:10 27 4
gpt4 key购买 nike

我的 MySQL 表中有 20.000.000 个条目。现在,对于我的 for 循环中的每个 ID,发送和接收以下查询需要 12 秒!

SELECT x FROM clicks WHERE urlID = 1234567"

表格如下所示:

x     urlID 
3 2523523
5 2236236
2 6363463
6 4574747
1 2523523

我必须检查这些 urlID 上的 100 万个。所以这需要 12 秒 * 100 万 = 130 天。有点太多了。那么我怎样才能加速我的 MySQL 或者你知道解决方法来让它更快?甚至其他更快的数据库。我只需要这种按 ID 搜索并获取 x 值的结构。这非常简单。

我已经测试过:

  • 编辑“my.ini”文件以使 MYSQL 测试速度更快,仅需要 100 万个条目,也需要 1 秒,所以我现在可以说它是线性的
  • CPU/RAM 总是最小的。 20% 免费,根本没有使用
  • 最新 MySQL 版本 5.5
  • 也在 SqLite 中进行了测试,它比 MySQL 测试还要慢 20%

请给我一些想法。已经在关注类似线程的一些想法,但它们对我没有帮助。

2。示例

假设上表称为“点击次数”。现在我们有另一个名为“test”的表。该表包括:

sessionID   urlID     performance
1234515 2523523
2523652 2236236
3643463 6363463
4574747 4574747
5858585 2342352

我最终想要的是,在“性能”中,有一个值表明 urlID 有多好。因此,应搜索 urlID 并在点击表中查找“x”值。现在我需要计算它们并总结它们。现在将“求和/计数”作为 float 写入“性能”列中。仅使用 MySQL 可以吗?或者我真的需要在 PHP、R 或其他语言中执行此操作吗?

我的 R 函数

fnc.generateDiff_result <- function(urlIDs) { 
string <- dbGetQuery(conRMySQL, sprintf("%s%s","SELECT diff_012 FROM clicks WHERE urlID = ",urlIDs))
test <- (sum(complete.cases(string)))
if (test==0){
return(0)
}
numberOfEntrys <- (sum(complete.cases(string)))
sumOfEntrys <- sum(string)
return(sumOfEntrys/numberOfEntrys)
}

最佳答案

takes 12 seconds for each ID in my for loop!

如果您在循环中创建并运行 SELECT 语句,那么您就做错了。解决这个问题将为您带来最大的性能胜利。

您尚未提供有关数据库配置方式或底层架构的任何详细信息。你有索引吗?如果没有,则添加一个(对于此查询,您需要在 (urlid,x) 按该顺序上添加一个)

接下来,去读一本关于 MySQL 性能的好书 - O'Reilly 的《高性能 MySQL》很好 - 以及一本关于关系数据库的简单书。阅读它们并应用知识 - 您应该与包含您要查找的 100 万个数据项的表进行联接,或者使用带有处理程序套接字的代码在应用程序中执行联接。

关于MySQL 在查询大量条目时速度太慢,有好的替代方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com