狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

10倍提升你的SQL查詢速度

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




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

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


1. 理解 SQL 的查詢順序

SQL 就像一個(gè)迷你版的編程語(yǔ)言,它按順序處理數(shù)據(jù)。



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

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

在數(shù)據(jù)庫(kù)設(shè)計(jì)中,數(shù)據(jù)工程師喜歡對(duì)數(shù)據(jù)庫(kù)進(jìn)行規(guī)范化,減少數(shù)據(jù)表之間的冗余,從而優(yōu)化存儲(chǔ)、理清數(shù)據(jù)關(guān)系。然而,凡事皆有利弊,與之對(duì)應(yīng)的缺點(diǎn)是查詢時(shí)需要多個(gè)連接和子查詢來對(duì)數(shù)據(jù)進(jìn)行非規(guī)范化以提取所需的信息。




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

為了加快查詢速度,建議首先對(duì)維度表進(jìn)行非規(guī)范化或聯(lián)接,因?yàn)榫S度表通常較小并且聯(lián)接速度更快。之后,如果可能的話,與大型事實(shí)表連接。在上述情況下,請(qǐng)嘗試在查詢的最后一步處理大型銷售表。根據(jù)前人的實(shí)踐經(jīng)驗(yàn),遵循這一理念通常可以將查詢速度提高 10 倍左右

3. 通過了解關(guān)鍵索引將查詢速度提高 100 倍

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




然而,實(shí)際上,數(shù)據(jù)并不是以連續(xù)的方式存儲(chǔ)的。它更像是一個(gè)鏈表數(shù)據(jù)結(jié)構(gòu)。通過時(shí)間查詢與通過列查詢之間存在巨大差異。

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




在這種情況下,基于時(shí)間塊運(yùn)行的查詢可能比按列運(yùn)行的查詢快 10 到 100 倍,因?yàn)閿?shù)據(jù)庫(kù)是按時(shí)間索引的。

此外,您可以要求數(shù)據(jù)分析師或數(shù)據(jù)工程師根據(jù)您的業(yè)務(wù)需求重新索引您的數(shù)據(jù)庫(kù)。

-- 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 的能力

在現(xiàn)實(shí)項(xiàng)目中,完成上述步驟后,由于 SQL 的帶寬或數(shù)據(jù)庫(kù)服務(wù)器的計(jì)算能力瓶頸,你的 SQL 查詢?nèi)匀徊粔蚩臁?/p>

這個(gè)時(shí)候就可以使用 Python/Pandas 將中間表緩存到本地驅(qū)動(dòng)器或云驅(qū)動(dòng)器,之后用戶就可以使用 Python 執(zhí)行繁重的表連接或聚合步驟,這樣通常會(huì)比在數(shù)據(jù)庫(kù)中執(zhí)行類似的步驟快得多。

下面是一個(gè)代碼示例,通過 Jupyter Notebook 執(zhí)行 PostgreSQL 查詢并將查詢結(jié)果導(dǎo)出為 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. 總結(jié)

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

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

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

Thank you for your reading, happy querying!



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