需要帮助优化代码,无法决定使用数据框进行排序还是mysql

时间:2019-04-12 14:00:10

标签: python mysql python-3.x

我正在编写代码以从1m数据库中获取数据(大小可能会增加)。我在本地有mysql服务器,并用python编写了所有内容。不擅长并尝试优化所有内容。

第一个问题是我是否可以编写更好的sql查询,第二个问题是,如果我应该尝试使用mysql进行所有操作,或者如果我使用dataframe例如对数据进行排序和过滤就很好了

def listJE(company_id, page_num, per_page):
    columns = 'tr_id, ' + 'tr_date, ' + 'description, '  + 'dr_acc, ' + 
              'cr_acc, ' + 'amount, ' + 'currency, '  + 'document, ' + 'comment'

    sn = (page_num - 1) * per_page
    en = per_page
    ncon = myDB()
    query = """SELECT {} 
               FROM transactions 
               WHERE company_id = {} and deleted = 0 
               ORDER BY tr_id 
               DESC LIMIT {}, {}""".format(
            columns, company_id, sn, en)

    df = ncon.getDF(query) 

return df

1 个答案:

答案 0 :(得分:0)

对于您的情况,我建议使用MySQL进行排序并返回所需的记录。熊猫是一个了不起的工具,可以做很多事情,但是在这种情况下,它可能并不是最适合您的。

由于您似乎在限制100万以上记录表中的行数,因此让MySQL对其进行排序并提供所需的记录而不是打包整个表,然后将其转移到应用程序中可能更有效。 ,然后留给您,以找出对它进行排序和切分适当记录的最佳方法。

如果您多次运行查询(如分页所示),MySQL可以缓存查询结果see this question。因此,在下一次迭代中,它可能只是“哦,我有这个警报!”并将结果发送给您,而不是重新计算。

进行优化非常好,但是要考虑时间和可读性方面的成本。如果您可以节省一些时间并使将来的内容更具可读性,例如在查询中对列名称进行硬编码而不是对其进行串联,那么请继续进行操作。如果您担心在MySQL或python处理之间节省几毫秒的时间,则应考虑所获得的价值。

如果创建的网站访问量较低,则5秒钟的查询可能很烦人,但可能并不重要。但是,正如评论中提到的那样,在工作站上本地运行它可能并不能很好地指示您何时最终将其推入服务器。