[英]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.