?

SQL數據庫查詢效率的研究

2016-03-09 00:37姚曦
電腦與電信 2016年7期
關鍵詞:運算符子句關系數據庫

姚曦

(福建衛生職業技術學院公共基礎部,福建 福州 350101)

SQL數據庫查詢效率的研究

姚曦

(福建衛生職業技術學院公共基礎部,福建 福州 350101)

本文介紹了SQL中連接的種類,連接的操作步驟,連接的語法。重點解析了在基于多表連接的查詢中如何提高效率,并通過學生數據庫的實例進一步說明。

連接;多表;優化查詢

1 概論

數據庫性能問題一直是決策者及技術人員共同關注的焦點,影響數據庫性能的一個重要因素就是SQL查詢語句的效率。SQL是結構化查詢語言(Structured Query Language)的縮寫,SQL語言的功能包括數據查詢、數據操縱、數據定義和數據控制等部分,主要應用于關系數據庫,實現了關系數據庫中的數據檢索。數據庫一般是由多張表來實現存儲,并通過多張表之間的連接關系建立完整有效的數據查詢。作為數據查詢語言SQL,提供了功能強大的數據表連接查詢功能。那么如何將這些表高效地有機地聯系起來,就成為設計關系數據庫的一個重要指標。

2 多表連接的類型

在關系數據庫應用中,由于需要經常對多個關聯表進行操作,可以通過同時檢索多個表來獲取所需的數據。一般分為三種連接的模式:內連接(INNER JOIN),外連接(OUTER JOIN),交叉連接(CROSS JOIN)。語法的連接格式如下:

<連接>::=

{

<表名>[{INNER

|{{LEFT|RIGHT|FULL}[OUTER]}

|CROSS

}]

JOIN<表名>

ON<連接條件>

}

2.1 內連接(INNER JOIN)

內連接使用比較運算符進行表間某(些)列數據的比較操作,并列出與連接條件相匹配的數據行。根據所使用的比較方式的不同,內連接又分為等值連接、不等連接和自然連接三種。

等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,也包括重復列。

不等連接:在連接條件使用除等于運算符以外的其它比較運算符比較被連接列的列值。這些運算符包括>、>=、< =、<、!>、!<和<>。

自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,查詢結果不包括重復列。

2.2 外連接(OUTER JOIN)

內連接返回滿足查詢條件的數據,不滿足的數據不會保留。而外連接則返回查詢條件中一個表或視圖的所有數據行。

外連接包括三種模式:左外連接(LEFT OUTER JOIN)、右外連接(RIGHT OUTER JOIN)和全連接(FULL OUTER JOIN)。

左外連接:保留左表中的所有數據,如果左表與右表的某些數據不匹配,則在結果集中右表不匹配的數據列均為空值。

右外連接:同左外連接相反,右外連接保留右表中的所有數據,如果左表與右表的某些數據不匹配,則在結果集中左表不匹配的數據列為空值。

全連接:也稱完整外連接,返回左表與右表中的所有數

據行,如果左表與右表達某些數據不匹配,則在結果集中的對應列均為空值。

2.3 交叉連接(CROSS JOIN)

交叉連接不使用WHERE子句,返回涉及表的笛卡兒積。如查詢表1及表2,表1有m行,表2有n行,查詢結果集有m×n行。

3 多表連接的優化查詢

聯接查詢操作的前提是笛卡兒積,從中找出符合條件的記錄,所以我們在做優化時盡量避免聯接查詢。如果避免不了的聯接操作要遵循以下2個原則從而達到優化時間和空間的目的。

給定三個關系模式:(以下實例均以此為例)

s(sno,sname,sex,birthday,email)

c(cno,cname,creadit)

sc(sno,cno,score)

3.1 選擇最有效率的表名順序(只在基于規則的優化器中有效)

在進行多表連接查詢時,解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表將被優先處理。因此在FROM子句中含多個表的情況下,須選擇元組數最少的表作為基礎表。例如s表有1000條數據,c表有10條數據。語句select*from s,c(選擇c為基礎表)比語句select*from c,s(選擇s為基礎表)更高效。

如果有3個以上的表連接查詢,那就需要選擇交叉表作為基礎表,交叉表是指那個被其他表所引用的表。例如sc表的sno和cno列分別在s表和c表中出現,sc表是s表和c表的交叉表。因此SQL語句

SELECT*FROM S,C,SNO

WHERE SC.CNO=C.CNOAND SC.SNO=S.SNO

將比下列語句更高效

SELECT*FROM SNO,S,C

WHERE SC.CNO=C.CNOAND SC.SNO=S.SNO

3.2 注意WHERE子句中的連接順序

SQL采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前,那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾。如果需要查詢成績為90分以上的學生信息。

SQL語句1:SELECT*FROM S,SC WHERE SCORE> 90 AND S.SNO=SC.SNO因為SQL自右向左進行執行,因此查詢語句先將兩張表按照學號進行連接,然后篩選出符合條件的記錄,表的連接是基于表的笛卡爾運算,消耗的時間會隨著記錄個數的增加很快地增長,因此SQL語句1是低效語句。

SQL語句2:SELECT*FROM S,SC WHERE S.SNO= SC.SNOAND SCORE>90此連接查詢語句克服了SQL語句1的缺點,首先篩選出符合條件的記錄,減少了進行聯接的記錄個數,然后再執行連接查詢,大大提高了查詢效率,是高效語句。

4 結論

本文介紹在數據庫的開發和維護過程中,多表連接查詢的優化設計可以提高系統性能,對于數據量大的數據庫系統更為重要。本文介紹了的幾種優化策略,在時間和空間上提高了系統的性能,在一定程度上提高了查詢效率。

[1]李丹.SQL Server2005數據庫管理與開發實用教程[M].北京:機械工業出版社,2010.

[2]吳潔明,周錦.基于Oracle數據庫SQL查詢語句優化規則的研究[J].陜西理工學院學報(自然科學版),2013(4):34-38.

Research on the Query Efficiency of SQL Database

Yao Xi
(Fujian Medical College,Fuzhou 350101,Fujian)

This paper introduces the type of connections,the operation steps of connections,and the connection syntax in SQL. It analyzes how to improve the query efficiency based on the multi-table connection,and further explains with the examples of the student database.

connections;multi-table;optimized query

TP311.13

A

1008-6609(2016)07-0108-02

姚曦,女,福建福州人,本科,講師,研究方向:計算機應用技術。

猜你喜歡
運算符子句關系數據庫
關系數據庫在高爐數據采集系統中的應用
老祖傳授基本運算符
命題邏輯可滿足性問題求解器的新型預處理子句消去方法
漢語和泰語關系子句的對比研究
關系數據庫技術在計算機網絡設計中的應用
用手機插頭的思路學習布爾運算符
西夏語的副詞子句
C語言中自增(自減)運算符的應用與分析
命題邏輯的子句集中文字的分類
一種基于數據圖劃分的關系數據庫關鍵詞檢索方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合