【问题标题】:MySQL: bulk sending 20000 SELECT query from c#MySQL:从 c# 批量发送 20000 SELECT 查询
【发布时间】:2020-02-25 10:09:20
【问题描述】:

我必须做一个非常简单的选择,只有参数改变。但是对于大量的关键字,我必须重复它。

SELECT url from mytable WHERE keyword like '%{key}%'

我可以使用

Select url from mytable where keyword in ('key1', 'key2'...) 

但我需要知道哪个 url 与每个 keyword关联。似乎 MySQL 不支持 table parameter 并且执行相同的语句 20K 次非常慢。

什么解决方案适合这个任务?

【问题讨论】:

  • 如果用在呢? Select url from mytable where keyword in ('key1', 'key2'...)
  • @PrakharLondhe:我会丢失有关哪个键与返回的 rurl 相关联的信息
  • 也许......如果我写 Select keyword, url from mytable where keyword in ('key1', 'key2'...) 它会部分工作。但是如何管理类似“%key%”的列表?
  • ":我会丢失有关哪个键与返回的 rurls 相关联的信息“-不。你会得到有限数量的 URL。您可以对它们进行后过滤以获取匹配的关键字。基本上选择 url 和关键字,然后在客户端再次过滤以找出哪个关键字被点击。
  • 有没有其他的解决方案,比如之前创建一个临时表?

标签: c# mysql database query-parameters


【解决方案1】:
Select url, keyword from mytable where keyword in ('key1', 'key2'...) 

这样,您将获得 URL 及其对应的限定关键字。但是如果不了解更多的表、记录、重复项等,您可能会获得比您关心的更多的记录。

至于尝试查找 20k 关键字,您可能需要构建一个辅助临时表并对其应用 JOIN。然后您可以一次插入 ex: 100 个关键字,这会更快(或执行一些批量加载选项),然后使用 JOIN 查询此临时表。

最后,如果多行是可能的,你可能想要

Select 
      url, 
      keyword,
      count(*) timesFound
   from 
      mytable 
   where 
      keyword in ('key1', 'key2'...) 
   group by
      url, 
      keyword

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2012-01-04
    • 2012-02-12
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多