欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

10倍提升你的SQL查詢速度

admin
2023年11月16日 20:36 本文熱度 636




作為一名數據分析師,SQL是必備技能之一。其優勢也比較明顯:易于理解,維護和擴展。然而,最大的挑戰在于,隨著數據量的增加,我們就會遇到延遲的瓶頸,或者說查詢太昂貴(耗時)而無法運行。

在這篇文章中我將會給出一些克服瓶頸的經驗,這些 tips 也許會讓延遲減小10倍甚至100倍。So,讓我們一起深入了解吧。


1. 理解 SQL 的查詢順序

SQL 就像一個迷你版的編程語言,它按順序處理數據。



使用諸如“where”和“having”的過濾子句來減小數據表的大小非常重要,并且這兩個子句的執行速度也相對較快。將較小的表傳遞到以下步驟是一個好主意。SQL 中的“group by”、聚合和窗口函數等子句可能會更耗時。所以,我們應該盡可能在較小的過濾表上運行這些耗時的計算,也不要在大表上執行計算相關的操作。

2. 用星型模式加快查詢速度

在數據庫設計中,數據工程師喜歡對數據庫進行規范化,減少數據表之間的冗余,從而優化存儲、理清數據關系。然而,凡事皆有利弊,與之對應的缺點是查詢時需要多個連接和子查詢來對數據進行非規范化以提取所需的信息。




星型模式使用事實表(通常具有較大尺寸)和維度表(較小尺寸)來優化查詢性能

為了加快查詢速度,建議首先對維度表進行非規范化或聯接,因為維度表通常較小并且聯接速度更快。之后,如果可能的話,與大型事實表連接。在上述情況下,請嘗試在查詢的最后一步處理大型銷售表。根據前人的實踐經驗,遵循這一理念通常可以將查詢速度提高 10 倍左右

3. 通過了解關鍵索引將查詢速度提高 100 倍

在下面的示例中,用戶可以按時間或按列遍歷/查詢數據。從視覺上看,按時間(逐行)或按列遍歷數據,時間復雜度可能不會有太大差異。




然而,實際上,數據并不是以連續的方式存儲的。它更像是一個鏈表數據結構。通過時間查詢與通過列查詢之間存在巨大差異。

如下圖所示,通過在查詢中使用時間索引,您可以輕松地將遍歷時間或查詢時間縮短10倍。隨著列數量的增加,效率增益甚至更大。國外某小哥親述在其項目工作中,在處理大型表(數 GB 數據)時,他們將查詢時間從 41 天縮短到大約 40 分鐘,速度提高了約 100 倍。




在這種情況下,基于時間塊運行的查詢可能比按列運行的查詢快 10 到 100 倍,因為數據庫是按時間索引的。

此外,您可以要求數據分析師或數據工程師根據您的業務需求重新索引您的數據庫。

-- two queries to pull large data datable
-- 1) much faster query by using time index
select * 
from your table
where time>start1 and time<end1

select * 
from your table
where time>start2 and time<end2

... ... 
--rest of timestamps

-- 2) much slow query by pulling column by column
select column1, column2 
from your table

select column3, column4 
from your table

... ... 
-- rest columns

4. 利用 Python 的能力

在現實項目中,完成上述步驟后,由于 SQL 的帶寬或數據庫服務器的計算能力瓶頸,你的 SQL 查詢仍然不夠快。

這個時候就可以使用 Python/Pandas 將中間表緩存到本地驅動器或云驅動器,之后用戶就可以使用 Python 執行繁重的表連接或聚合步驟,這樣通常會比在數據庫中執行類似的步驟快得多。

下面是一個代碼示例,通過 Jupyter Notebook 執行 PostgreSQL 查詢并將查詢結果導出為 dataframe:

import pandas as pd
from sqlalchemy import create_engine

# Set up the database connection
engine = create_engine('postgresql://yourusername:yourpassword@yourhostname:yourport/yourdbname')

# execute a SQL query and store the results in a Pandas DataFrame
df = pd.read_sql_query('select target_columns from yourtablename', con=engine)

# Print the DataFrame
print(df)

5. 總結

在這篇文章中,我們總結了四種加快你 SQL 查詢速度的方式:

  • 理解 SQL 的執行順序,在運行昂貴的計算之前先減小表的大小。
  • 理解星型模式首先連接小維度表,最后連接大事實表。
  • 理解索引并根據關鍵索引來查詢大表以提升查詢速度。
  • 最后是利用 Pandas 來提升查詢速度。

希望這篇文章對您有用,如果您有更好的技巧或建議,請與我們一同分享。

Thank you for your reading, happy querying!



該文章在 2023/11/16 20:36:36 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved