針對SQL語句聯表查詢深入優化

2021-07-14 07:48:25 字數 1258 閱讀 8729

容我裝個b,用深入這個詞

本文章只涉及到sql語句優化,未涉及框架注意哈

先解釋原理,自己總結的如果不對可以指出:

這是乙個查詢指定使用者訂單擴充套件資訊的例子

聯表查詢對於資料庫效能的損耗是呈倍數增長

如orders, orders_details 表各有1000條資料

單獨查詢乙個表時,我們算1000個單位的效能消耗

當2個表聯表查詢是就是1000*1000,效能消耗就是100w

查詢中需要從多個表獲取資料,如果無優化如:

select  * from orders,orders_details

where orders.id=orders_details.order_id and user_id =123

這是乙個普通的聯表查詢,效能消耗100w單位,並且隨著資料量的增長,效能消耗成倍增長,

以下是優化語句

一般優化:先進行過濾在進行,進行查詢

select  * from

(select  orders_id from orders where user_id =123)orders,

orders_detailswhere orders.id= orders_details.order_id

這樣先賽選方法還是有缺陷,雖然效能消耗並沒有那麼恐怖了,但是正常還是有幾十* (st_orders_details)行總和的消耗,

我現在使用的優化方案

select *from orders_details where order_id in (select id from orders where user_id=123)

這種方式只需要全表掃瞄一次就成功,按照上面的效能消耗說法,基本只需要消耗1000的單位就行,並且資料增長後消耗是加法而不是乘法.

如果有不足請指出,都可以討論討論

sql 語句 聯表查詢

1 replace into 用replace into 替代insert into 根據唯一主鍵判斷 無則插入,有則刪除重新插入 覆蓋 不適用自增id做主鍵。因為會刪除id.2.同表 分銷查詢下級每代的人數 內聯查詢 獲取第二代的人 select a.user name,a.reg time,a....

sql語句聯表查詢之(join on)

表1 表的結構 bumen create table if not exists bumen bid int 10 not null auto increment,mingcheng varchar 30 default null,jingli varchar 30 default null,tel...

sql聯表查詢

比如 all list 這個表,是包含所有資料的,我們要把整個資料的某些字段查詢出來顯示在列表上 select from all list select 現在我要檢視一條資料,需要根據表 user list 的乙個字段內容,去檢視另外乙個表 info list 的內容 select dept nam...