簡體   English   中英

需要幫助來優化代碼,不能決定使用數據幀進行排序或mysql

[英]Need help to optimze code , cant decide to use dataframe for sorting or mysql

我正在編寫代碼來從1m數據庫中獲取數據(大小可以增加)。 我在本地有mysql服務器並在python中編寫所有內容。 不擅長並試圖優化一切。

第一個問題是,如果我可以編寫更好的SQL查詢,第二個問題是,如果我應該嘗試使用mysql做所有事情,或者如果我使用數據框來排序和過濾數據會很好

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

對於您的情況,我建議使用MySQL進行排序並返回您需要的記錄。 熊貓是一個了不起的工具,可以做很多事情,但在這種情況下它可能不是最好的。

由於您似乎限制了100萬+記錄表中的行數,因此讓MySQL排序並為您提供所需的記錄可能更有效,而不是打包整個表,將其傳輸到您的應用程序,然后留給你找出排序和切片相應記錄的最佳方法。

如果您多次運行查詢(因為您的分頁似乎暗示),MySQL可以緩存查詢結果, 請參閱此問題 所以在下一次迭代中,它可能只是“哦,我有這個alredy!” 並將結果發送給您而不是重新計算。

優化是非常好的,但要考慮時間和可讀性的成本。 如果您可以節省一些時間並使將來的內容更具可讀性,例如在查詢中對列名進行硬編碼而不是連接它們,那么請繼續執行。 如果你擔心在MySQL之間或在python中處理幾秒鍾,你應該考慮獲得的價值。

如果您要創建流量較低的站點,那么5秒查詢可能會令人討厭,但可能並不重要。 但正如評論中提到的那樣,在工作站上本地運行它可能不是一個很好的指示,當你最終將它推送到服務器時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM