如何提高SQL語言的查詢效率

2021-08-22 05:26:52 字數 2365 閱讀 1517

如何

提高sql語言的查詢效率

?

問:請問我如何才能提高sql語言的查詢效率呢?

答:這得從頭說起:

由於sql是面向結果而不是面向過程的查詢語言,所以一般支援sql語言的大型關係型資料庫都使用乙個基於查詢成本的優化器,為即時查詢提供乙個最佳的執行策略。對於優化器,輸入是一條查詢語句,輸出是乙個執行策略。

一條sql查詢語句可以有多種執行策略,優化器將估計出全部執行方法中所需時間最少的所謂成本最低的那一種方法。所有優化都是基於用記所使用的查詢語句中的where子句,優化器對where子句中的優化主要用搜尋引數(serach argument)。

搜尋引數的核心思想就是資料庫使用表中字段的索引來查詢資料,而不必直接查詢記錄中的資料。

帶有 =、<、<=、>、>= 等操作符的條件語句可以直接使用索引,如下列是搜尋引數:

emp_id = "10001" 或 salary > 3000 或 a =1 and c = 7

而下列則不是搜尋引數:

salary = emp_salary 或 dep_id != 10 或 salary * 12 >= 3000 或 a=1 or c=7

第一種方法:

select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (department.dep_code='01') and (employee.dep_code='01');

它的搜尋分析結果如下:

estimate 2 i/o operations

scan department using primary key

for rows where dep_code equals '01'

estimate getting here 1 times

scan employee sequentially

estimate getting here 5 times

第二種方法:

select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (department.dep_code='01');

它的搜尋分析結果如下:

estimate 2 i/o operations

scan department using primary key

for rows where dep_code equals '01'

estimate getting here 1 times

scan employee sequentially

estimate getting here 5 times

第一種方法與第二種執行效率相同,但第一種方法最好,因為它為優化器提供了更多的選擇機會。

第三種方法:

select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (employee.dep_code='01');

這種方法最不好,因為它無法使用索引,也就是無法優化……

使用sql語句時應注意以下幾點:

1、避免使用不相容的資料型別。例如,float和integer,char和varchar,binary和long binary不相容的。資料型別的不相容可能使優化器無法執行一些本可以進行的優化操作。例如:

select emp_name form employee where salary > 3000;

在此語句中若salary是float型別的,則優化器很難對其進行優化,因為3000是個整數,我們應在程式設計時使用3000.0而不要等執行時讓dbms進行轉化。

2、盡量不要使用表示式,因它在編繹時是無法得到的,所以sql只能使用其平均密度來估計將要命中的記錄數。

3、避免對搜尋引數使用其他的數學操作符。如:

select emp_name from employee where salary * 12 > 3000;

應改為:

select emp_name from employee where salary > 250;

4、避免使用 != 或 <> 等這樣的操作符,因為它會使系統無法使用索引,而只能直接搜尋表中的資料。

→我是小木魚(lag)

寫於2023年12月16日

如何提高SQL語言的查詢效率

由於sql是面向結果而不是面向過程的查詢語言,所以一般支援sql語言的大型關係型資料庫都使用乙個基於查詢成本的優化器,為即時查詢提供乙個最佳的執行策略。對於優化器,輸入是一條查詢語句,輸出是乙個執行策略。一條sql查詢語句可以有多種執行策略,優化器將估計出全部執行方法中所需時間最少的所謂成本最低的那...

sql 如何提高SQL查詢的效率?

如何提高sql查詢的效率?原創猴子聊人物 發布於2019 10 31 21 00 00 閱讀數 11195 收藏 展開 題目 我們公司的資料量非常大,需要的不僅僅是提取資料,要了解sql方案優化的。一般在寫sql時需要注意哪些問題,可以提高查詢的效率?解題思路 資料量大的情況下,不同的sql語句,消...

如何提高SQL查詢的效率?

1.select子句中盡量避免使用 select子句中,是選擇全部資料的意思,比如語句 select from 成績表 意思是選擇成績表中所有列的資料 面對動輒十萬 百萬,甚至上千萬的資料,此時需要哪些列的資料,就提取哪些列的資料,盡量少用 來獲取資料 2.where子句比較符號左側避免函式 盡量避...