SQL優化必知技巧 避免排序

2021-08-28 19:04:05 字數 1271 閱讀 2664

我們知道 sql 語言中,使用者不能顯示地命令資料庫進行排序操作。對使用者隱藏這樣操作正式sql的設計思想。但資料庫有些命令會對結果進行排序,當資料量較大時,排序會非常耗時。本文我們討論如何避免無謂的排序,提公升sql執行效率。

下面列舉會排序的代表性運算:
下面通過兩個示例進行說明,分別是union 和 distinct。

select * from table_a

union all

select * from table_b;

如果不在乎結果中存在重複資料,或預先知道結果中不會有重複資料。請使用union all 代替 union,這樣就不會進行排序。

示例資料說明,下面有商品表和銷售記錄表。

items:

item_no

item

10fd

20cd-r

30mo

40***

saleshistory:

sale_date

item_no

item

2018-01-01104

2018-01-01205

2018-01-01303

2018-01-03107

2018-01-03109

2018-01-04202

2018-01-04

3012

問題:查詢有銷售記錄的商品。

當然我們可以使用in方式實現,但因為in會產生子查詢,不如使用連線查詢效率高。

select distinct i.item_no

from items i inner join saleshistory s

on i.item_no = s.item_no;

因為是一對多查詢,會產生重覆記錄,所有使用distinct過濾重覆記錄。

但更好的做法是使用exists方式:

select distinct i.item_no

from items i

where exists (

select * from saleshistory s

where i.item_no = s.item_no

);

因為使用exists 查詢時不會進行排序,而且使用exists和使用連線效率一樣高。

本文討論了sql中避免出現無謂的排序,通過兩個示例進行說明,盡量使用union all 代替 union,exists 代替 distinct。

SQL必知必會

資料庫 儲存有組織的資料的容器。資料庫管理系統 dbms 資料庫軟體,資料庫是通過dbms建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...

mysql必知必 SQL必知必會學習筆記 一

資料庫基礎 資料庫 資料庫軟體 確切的說,資料庫軟體應稱為資料庫管理系統 dbms 資料庫是通過dbms建立和操作的容器 資料庫相當於檔案櫃 容器 表相當於檔案 同乙個資料庫不能存在相同的表名,不同的資料庫可以存在相同的表名 主鍵應滿足的條件 唯一性非空性 not null 主鍵列中的值不允許修改或...

優化Android App效能?十大技巧必知!

為了加快響應速度,需要把費時的操作 比如網路請求 資料庫操作或者複雜的計算 從主線程移動到乙個單獨的執行緒中。最高效的方式就是在類這一級完成 這項操作,可以使用asynctask或者intentservice來建立後台操作。如果選擇使用intentservice,它會在需要的時候啟動起 來,然後通過...