成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL中的n+1次select語句查詢問題

數據庫 SQL Server
select語句的數目太多,需要頻繁的訪問數據庫,會影響檢索性能。如果需要查詢n個Customer對象,那么必須執行n+1次select查詢語句。這就是經典的n+1次select查詢問題。

如果當SQL數據庫中select語句數目過多,就會影響數據庫的性能,如果需要查詢n個Customer對象,那么必須執行n+1次select查詢語句,下文就將為您講解這個n+1次select查詢問題。

在Session的緩存中存放的是相互關聯的對象圖。默認情況下,當Hibernate從數據庫中加載Customer對象時,會同時加載所有關聯的Order對象。以Customer和Order類為例,假定ORDERS表的CUSTOMER_ID外鍵允許為null,圖1列出了CUSTOMERS表和ORDERS表中的記錄。


以下Session的find()方法用于到數據庫中檢索所有的Customer對象:

List customerLists=session.find("from Customer as c");

運行以上find()方法時,Hibernate將先查詢CUSTOMERS表中所有的記錄,然后根據每條記錄的ID,到ORDERS表中查詢有參照關系的記錄,Hibernate將依次執行以下select語句:

select * from CUSTOMERS;
select * from ORDERS where CUSTOMER_ID=1;
select * from ORDERS where CUSTOMER_ID=2;
select * from ORDERS where CUSTOMER_ID=3;
select * from ORDERS where CUSTOMER_ID=4;#p#

通過以上5條select語句,Hibernate最后加載了4個Customer對象和5個Order對象,在內存中形成了一幅關聯的對象圖,參見圖2。


Hibernate在檢索與Customer關聯的Order對象時,使用了默認的立即檢索策略。這種檢索策略存在兩大不足:

(1) select語句的數目太多,需要頻繁的訪問數據庫,會影響檢索性能。如果需要查詢n個Customer對象,那么必須執行n+1次select查詢語句。這就是經典的n+1次select查詢問題。這種檢索策略沒有利用SQL的連接查詢功能,例如以上5條select語句完全可以通過以下1條select語句來完成:

select * from CUSTOMERS left outer join ORDERS
on CUSTOMERS.ID=ORDERS.CUSTOMER_ID

以上select語句使用了SQL的左外連接查詢功能,能夠在一條select語句中查詢出CUSTOMERS表的所有記錄,以及匹配的ORDERS表的記錄。

(2)在應用邏輯只需要訪問Customer對象,而不需要訪問Order對象的場合,加載Order對象完全是多余的操作,這些多余的Order對象白白浪費了許多內存空間。
為了解決以上問題,Hibernate提供了其他兩種檢索策略:延遲檢索策略和迫切左外連接檢索策略。延遲檢索策略能避免多余加載應用程序不需要訪問的關聯對象,迫切左外連接檢索策略則充分利用了SQL的外連接查詢功能,能夠減少select語句的數目。

 

【編輯推薦】

SQL語句中的鎖定語句

SQL中SELECT INTO和INSERT INTO SELECT語句介紹

如何解決SQL Server中傳入select語句in范圍參數

使用SQL中SELECT語句的使用條件邏輯

SQL語句中的嵌套SELECT語句

責任編輯:段燃 來源: 博客園
相關推薦

2010-08-23 09:50:20

Ruby on Rai

2023-06-13 18:27:29

數量Java定期測試

2019-05-24 08:36:33

MySQL查詢SQL

2011-05-18 10:24:55

Oracle

2010-09-03 15:27:02

SQLSELECT語句

2020-11-16 07:26:25

賠償碼農

2010-11-11 11:37:22

SQL SELECT語

2023-03-30 09:10:06

SQLSELECTFROM

2010-09-03 14:39:15

SQLSELECT語句

2018-11-30 08:38:24

裁員互聯網電商

2025-04-07 07:20:35

SQL慢查詢性能

2010-09-08 15:51:53

SQL語句where

2010-09-03 14:47:50

SQLSELECT語句

2010-11-11 11:49:02

SQL嵌套SELECT

2010-09-07 16:38:36

SQL語句SELECT DIST

2021-05-26 05:22:48

SQL 數據庫SELECT

2009-02-26 08:42:31

聯想裁員賠償標準

2010-09-07 10:35:38

SQL語句

2010-09-03 14:56:12

SQLSELECT語句

2010-07-08 13:32:22

SQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品小视频 | 日韩av一区二区在线观看 | 国产精品久久久久久高潮 | 三级黄色片在线播放 | 四虎影院美女 | 欧美日韩国产中文 | 干干干操操操 | 日韩欧美国产一区二区三区 | 久久精品国产a三级三级三级 | 亚洲三区视频 | 成人乱人乱一区二区三区软件 | 91porn在线观看| 亚洲成人一二区 | 颜色网站在线观看 | 视频一区二区在线观看 | 欧美精品v | 91热爆在线观看 | 在线亚洲精品 | 一区二区三区四区不卡视频 | 自拍视频精品 | 成人精品视频在线观看 | 欧美一级全黄 | 成人av网站在线观看 | 福利国产| 在线观看国产 | 69xxx免费| 亚洲日本欧美日韩高观看 | 欧美精品在欧美一区二区 | 中文字幕精品视频在线观看 | 亚洲精品视频免费观看 | 噜久寡妇噜噜久久寡妇 | 99久久久99久久国产片鸭王 | 久久精品亚洲 | www国产成人 | 国产综合在线视频 | 9porny九色视频自拍 | 国产精品一区在线观看 | 在线免费观看色 | 97日韩精品 | 中日字幕大片在线播放 | 欧美a在线看 |