自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五招提升SQL Query性能

譯文 精選
數(shù)據(jù)庫
如果從事數(shù)據(jù)工作,你會(huì)一直編寫SQL查詢。那么,如何編寫針對(duì)性能進(jìn)行優(yōu)化的高效SQL查詢呢?

譯者 | 布加迪

審校 | 重樓

所有數(shù)據(jù)角色都需要強(qiáng)大的數(shù)據(jù)庫和SQL技能。在實(shí)踐中,你通常會(huì)在一天的工作中查詢超大的數(shù)據(jù)庫表(含有成千上萬。所以,SQL查詢的性能成為決定應(yīng)用程序整體性能的一個(gè)重要因素。

優(yōu)化不佳的查詢常常導(dǎo)致響應(yīng)時(shí)間變慢、服務(wù)器負(fù)載加以及用戶體驗(yàn)差強(qiáng)人意。因此,理解和運(yùn)用SQL查詢優(yōu)化技術(shù)顯得必不可少。

本教程介紹了優(yōu)化SQL查詢的實(shí)用技巧。

準(zhǔn)備工作:獲取一個(gè)示例數(shù)據(jù)庫表

在為使用的任何數(shù)據(jù)庫編寫SQL查詢時(shí)都可以使用以下技巧。但如果你希望使用一個(gè)示例數(shù)據(jù)庫表來運(yùn)行這些查詢,可以使用這個(gè)Python腳本

它連接到一個(gè)SQLite數(shù)據(jù)庫employees.db,創(chuàng)建一個(gè)employees表,并用10000條記錄填充該表。如所述,你總是可以創(chuàng)建自己的示例。

1. 不要使用SELECT *,改而選擇特定的列

對(duì)于初學(xué)者來說,使用SELECT *從表中檢索所有列很常見。如果你只需要幾列幾乎總是這樣,那么這可能很低效。

因此,使用SELECT *可能導(dǎo)致過度的數(shù)據(jù)處理,當(dāng)表有許多列或者你在處理龐大數(shù)據(jù)集時(shí)尤為如此。

這樣

SELECT * FROM employees;

而要

SELECT employee_id, first_name, last_name FROM employees;

只讀取必要的列可以使查詢更具可讀性和可維護(hù)性。

2. 避免使用SELECT DISTINCT,改而使用GROUP BY

SELECT DISTINCT之所以開銷很大,是由于它需要對(duì)結(jié)果進(jìn)行排序和過濾以刪除重復(fù)項(xiàng)。最好確保查詢的數(shù)據(jù)在設(shè)計(jì)上是獨(dú)特使用主鍵或獨(dú)特的約束。

這樣

SELECT DISTINCT department FROM employees;

下面這個(gè)帶有GROUP BY子句的查詢更有幫助

SELECT department FROM employees GROUP BY department;

GROUP BY可以更高效,特別是在適當(dāng)索引的情況(后面會(huì)討論索引)。因此,在編寫查詢時(shí),確保在數(shù)據(jù)模型層面了解數(shù)據(jù)不同的字段。

3. 限制查詢結(jié)果

通常你會(huì)查詢有數(shù)千行的大型表,但并不總是需要處理所有行,也無法處理所有行。使用LIMIT子句或等效子句有助于減少返回的行數(shù),從而提查詢性能。

你可以將結(jié)果限制為15條記錄

SELECT employee_id, first_name, last_name FROM employees LIMIT 15

使用LIMIT子句可以縮小結(jié)果集的大小,從而減少需要處理和傳輸?shù)臄?shù)據(jù)量。這對(duì)于在應(yīng)用程序中結(jié)果編頁碼也很有用。

4. 使用索引加快檢索

索引允許數(shù)據(jù)庫比掃描整個(gè)表更快地查找行,從而顯著提高查詢性能。它們對(duì)于WHERE、JOIN和ORDER BY子句中經(jīng)常使用的列特別有用。

下面是針對(duì)“department列創(chuàng)建的示例索引

CREATE INDEX idx_employee_department ON employees(department);

你現(xiàn)在可以運(yùn)行過濾' department '列的查詢,并比較執(zhí)行時(shí)間。使用索引后,你應(yīng)該能夠更快地看到使用結(jié)果。了解有關(guān)創(chuàng)建索引和性能改進(jìn)的更多信息,參閱《如何使用索引加速SQL查詢(Python版)》。

如前所述,索引提高了對(duì)索引列進(jìn)行過濾的查詢的效率。但是創(chuàng)建太多的索引可能會(huì)成為一件事。這就引出了下一個(gè)技巧。

5. 謹(jǐn)慎使用索引

雖然索引提高了讀性能,但會(huì)降低寫性能:INSERT、UPDATE和DELETE查詢,因?yàn)槊看涡薷谋頃r(shí)都必須更新索引。根據(jù)你經(jīng)常運(yùn)行的查詢類型來兼顧索引的數(shù)量和類型很重要。

幾條可靠的規(guī)則:

  • 只索引經(jīng)常查詢的列。
  • 避免對(duì)基數(shù)低的列少數(shù)唯一值進(jìn)行過索引
  • 定期檢查索引,并根據(jù)需要更新和刪除索引。

總之,創(chuàng)建索引加快對(duì)經(jīng)常查詢但很少更新的列的檢索速度。這確保索引的好處壓倒維護(hù)成本。

結(jié)

優(yōu)化SQL查詢需要了解查詢的特定需求和數(shù)據(jù)結(jié)構(gòu)。

如果避免SELECT *、謹(jǐn)慎使用SELECT DISTINCT、限制查詢結(jié)果、創(chuàng)建適當(dāng)?shù)乃饕约白⒁馑饕?/span>方面取舍,你可以顯著提升數(shù)據(jù)庫操作的性能和效率。

查詢愉快!

原文標(biāo)題:5 Tips for Improving SQL Query Performance,作者:Bala Priya C


責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2010-01-20 11:09:18

虛擬服務(wù)器安全

2015-03-10 11:34:22

SQL Server數(shù)據(jù)匯總ROUPBY

2011-08-03 09:22:25

MySQL可擴(kuò)展性

2015-09-24 10:06:59

2010-01-28 10:45:39

虛擬服務(wù)器服務(wù)器安全

2015-09-23 09:43:59

2022-11-16 09:57:23

優(yōu)化接口

2020-06-03 07:00:12

云成本監(jiān)控工具云散亂

2020-02-04 12:44:03

混合云架構(gòu)公共云

2019-12-20 08:00:00

云賬號(hào)劫持網(wǎng)絡(luò)釣魚云安全

2009-01-03 09:14:00

網(wǎng)絡(luò)模塊選購

2010-08-25 15:24:13

職業(yè)定位

2009-10-09 09:39:47

2020-01-14 09:00:00

網(wǎng)站性能前端

2018-03-22 12:44:13

2011-06-09 09:59:16

2011-08-02 09:01:14

2010-08-25 13:31:22

網(wǎng)絡(luò)故障排除

2009-11-13 11:05:49

2015-05-29 17:00:48

XY
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)