SQL常見面試題彙總

2021-09-27 16:46:10 字數 1299 閱讀 7936

sql查詢較慢的原因以及改進方法(重要程度 五顆*****)

1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是程式設計的缺陷)

create [unique][clustered | nonclustered]  index  index_name  

on [with [index_property [,....n]]

說明:

unique: 建立唯一索引。

clustered: 建立聚集索引。

nonclustered: 建立非聚集索引。

index_property: 索引屬性。

2、查詢出的資料量過大(可以採用多次查詢的方法降低資料量)

3、鎖或者死鎖(這也是查詢慢最常見的問題,是程式設計的缺陷)

產生死鎖的原因——資源競爭。

表現為:乙個使用者a 訪問表a(鎖住了表a),然後又訪問表b,另乙個使用者b 訪問表b(鎖住了表b),然後企圖訪問表a,這時使用者a由於使用者b已經鎖住表b,它必須等待使用者b釋放表b才能繼續。這就是死鎖。

解決方法:盡量避免同時鎖定兩個資源; 必須同時鎖定兩個資源時,要保證在任何時刻都應該按照相同的順序來鎖定資源。

4、返回了不必要的行和列

5、distinct和union會使查詢變慢,不必要時減少使用。

6、between在某些時候比 in 速度更快

select* from chineseresume where title in (『男』,『女』)

和 select * fromchineseresume where between 『男』 and '女』是一樣的。

由於in會在比較多次,所以有時會慢些。

如果一定用in,將出現最頻繁的值放在前面,出現得最少的放在後面,減少判斷的次數。

7、用or的字句可以分解成多個查詢,並且通過union連線多個查詢。

8、盡量少用檢視,它的效率低。對檢視操作比直接對錶操作慢。

9、盡量用其它寫法,取代not in,如a,b表同結構,資料量很大,則代替select * from a where a.c not in (select c from b )的語句有

a)select a.* from a, b where a.c = b.c + and b.c is null(據說速度比原寫法提高30倍)

b)select * from a minus select a.* from a,b where a.c=b.c (速度其次)

c)select * from a where not exist(select a.* from a,b where a.c=b.c) (也不錯)

常見面試題

1.get和post的區別 1 本質區別 get是向伺服器請求資料,post是向伺服器傳送資料。2 伺服器獲取值的方式 get方式提交的資料,伺服器端使用request.querystring獲取變數的值。post方式提交的資料,伺服器端使用request.form獲取資料。3 安全性 get安全效...

常見面試題

1 一行 實現1 100之和 lst i for i in range 1,101 print sum lst 2 如何在乙個函式內部修改全域性變數?在函式內部新增 global 變數名 這樣就可以在本地作用域定義全域性作用域了 name 大明 def eat name1 global name n...

常見面試題

dns解析 發起tcp三次握手,並建立tcp連線 發起http請求 伺服器相應http請求並得到html 伺服器解析html 並對頁面進行渲染然後返回給使用者 首先先進行ioc容器的初始化 ioc 容器的初始化過程分為三步驟 resource 定位 beandefinition 的載入和解析,bea...