首页 > 解决方案 > 如何提高pandas中mysql查询的处理速度

问题描述

我在元组中的 ID 如下

ids = tuple(df1['ids'])

ids 有 100k 行

我的查询

q_id=f'''

SELECT id, COUNT(*) AS Count 
FROM NEWS 
WHERE status = 'JOINED' AND id IN {ids} 
GROUP BY 1

connection是一种使用用户名和密码建立连接的方法

df2 = connection('mysqldb', q_id)

需要太多时间才能得到结果。如何提高pandas中mysql查询的处理速度?

标签: pythonmysqlpandaspymysql

解决方案


请提供SHOW CREATE TABLE news

它需要包括

 INDEX(status, id)

idPRIMARY KEY?如果是这样,那么这是一个相当奇怪的查询:

SELECT id, COUNT(*) AS Count 
    FROM NEWS 
    WHERE status = 'JOINED'
      AND id IN {ids} 
    GROUP BY 1

因为所有的计数都是“1”。(这是因为PRIMARY KEY是“独特的”)。

要找出这些 id 中有多少'JOINED':

SELECT COUNT(*) AS Count 
    FROM NEWS 
    WHERE status = 'JOINED'
      AND id IN {ids} 

要找出哪些id 是'JOINED':

SELECT id 
    FROM NEWS 
    WHERE status = 'JOINED'
      AND id IN {ids} 

推荐阅读