資料庫常見面試知識

2021-09-01 15:43:38 字數 4171 閱讀 9436

一。sql語句優化的策略都有哪些:

1.建表的時候。應盡量建立主鍵,根據主鍵查詢資料;

2.大資料表刪除,用truncate table代替delete。

3.合理使用索引,在oltp應用中一張表的索引不要太多。組合索引的列順序盡

量與查詢條件列順序保持一致;對於資料操作頻繁的表,索引需要定期重建,

以減少失效的索引和碎片。

4.查詢盡量用確定的列名,少用*號

5.使用where條件命中索引

6.將能過濾大量資料的where條件放到where條件集合的最前門

7.對於大量的字元匹配,要使用exist,用in拼接的話容易造成sql被無端擷取

二。資料庫表關聯:

分了內連線和外連線。內連線也就是相等連線

外連線分為左外連線和右外連線。

1. left outer join:左外關聯

select e.last_name, e.department_id, d.department_name

from employees e

left outer join departments d

on (e.department_id = d.department_id);

等價於

select e.last_name, e.department_id, d.department_name

from employees e, departments d

where e.department_id=d.department_id(+);

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的

員工記錄

2. right outer join:右外關聯

select e.last_name, e.department_id, d.department_name

from employees e

right outer join departments d

on (e.department_id = d.department_id);

等價於

select e.last_name, e.department_id, d.department_name

from employees e, departments d

where e.department_id(+)=d.department_id;

結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。

3. full outer join:全外關聯

select e.last_name, e.department_id, d.department_name

from employees e

full outer join departments d

on (e.department_id = d.department_id);

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號 department_id

的員工記錄和沒有任何員工的部門記錄。

9. 事務:是一系列的資料庫操作,是資料庫應用的基本邏輯單位。事務性質:

 原子性。即不可分割性,事務要麼全部被執行,要麼就全部不被執行。

 一致性或可串性。事務的執行使得資料庫從一種正確狀態轉換成另一種正確

狀態 隔離性。在事務正確提交之前,不允許把該事務對資料的任何改變提供給任

何其他事務,

 永續性。事務正確提交後,其結果將永久儲存在資料庫中,即使在事務提交

後有了其他故障,事務的處理結果也會得到儲存。

儲存過程:儲存過程就是編譯好了的一些sql語句。因為sql語句已經預編繹過

了,因此執行的速度比較快。

grant (select,delete,…) on (物件) to user_name [with grant

option];//授權

revoke (許可權表) on(物件) from user_name [with revoke option] //撤權

create unique index index_name on tablename(col_name);//建索引

insert into tablename values(exp1,exp2,…);//插

入insert into viewname values(exp1,exp2,…);//插入

檢視實際影響表

update tablename set name=』zang 3』,email=『wew』 condition;//更新

資料資料庫索引類似於書的目錄,主要用於提高查詢效率,也就是按條件查詢的時

候,先查詢索引,再通過索引找到相關的資料,索引相當於記錄了對某個關鍵

詞,指定到不同的檔案,或者檔案裡的不同位置,當然索引自身也是通過檔案

來儲存的

加了索引後,也不能保證在每次檢索時都會使用列索引。

如果, sql 檢索語句編寫不當,就無法使用索引。

1、like 運算子,進行模糊檢索時,只能在前方一致的檢索時,才能使用索引

。以下寫法,索引不會被使用。

[sql]

select * from employee where lname_pinyin like '%w%';

select * from employee where lname_pinyin like '%w';

2、使用 is not null 、 <> 的場合,也不會使用索引。如下:

[sql]

select * from employee where lname_pinyin is not null;

select * from employee where lname_pinyin <> 'wang';

3、對列使用了運算或者函式的情況下,不會使用索引,如下:

[sql]

select * from employee where year(birth) = '1980'; -- 不使用索引

select * from employee where birth >= '1980-01-01' and birth <=

'1980-12-31'; --使用了索引

4、復合索引的第一列,沒有包含在 where 條件語句中,如下:

[sql]

create index idx_pinyin on employee(lname_pinyin, fname_pinyin);

select * from employee where lname_pinyin = 'wang' and fname_pinyin =

'xiao'; --用了索引

select * from employee where lname_pinyin = 'wang'; --用了索引

select * from employee where fname_pinyin = 'xiao'; -- 沒有使用索引

select * from employee where lname_pinyin = 'wang' or fname_pinyin =

'xiao'; -- 沒有使用索引

復合索引

[sql]

create index idx_pinyin on employee( lname_pinyin, fname_pinyin);

show index from employee\g

唯一性索引

使用 unique 關鍵字,來建立不可重複的索引,稱為:唯一性索引。

對特定列建立唯一性索引,相當於對該列追加了唯一性制約。

建立唯一性索引的時候,如果物件列中,已經含有重複資料,則:建立失敗,

報錯。建立成功後,如果,插入重複資料,則:插入失敗,報錯。

指定多個列,來建立唯一性索引,只要,這些列的組合資料不重複,就可以創

建成功。

索引,顧名思義,是為了檢索的便捷性。因為索引需要單獨去維護,所以對於

資料庫的刪除,插入,更新操作有影響,批量的操作,速度就會很慢,感覺就

會很明顯。

對於in,rule優化器選擇的內查詢的結果作為驅動表來進行nest loops連線,

所以當內查詢的結果集比較小的時候,這個in的效率還是比較高的。

對於exists,則是利用外查詢表的全表掃瞄結果集過濾內查詢的結果集,當外

查詢的表比較大的時候,相對效率比較低

常見面試資料庫優化

在資料倉儲專案中,由於資料規模龐大,提高資料的查詢效率是永恆的主題,常見的優化手段有 1 硬體優化,提高機器效能,增加硬體等 2 優化查詢語句,將限定性強的where條件放前,用exists代替in操作等 3 優化索引,建立有效的索引並檢查和修復缺少的統計資訊等 4 資料庫系統檔案優化,將資料檔案 ...

資料庫常見面試題

1.事務的四大特性acid 1 原子性 事務包含的操作要麼全部成功,要麼全部回退。2 一致性 事務開始前和開始後,資料庫的完整性沒有被破壞。舉例 轉賬 3 隔離性 對資料庫進行併發操作時,事務不能被其他事務干擾。4 永續性 事務一旦提交,對資料庫的影響是永久的。2.事務的併發 包含3類資料讀和2類資...

資料庫方面常見面試題

1 說出資料連線池的工作機制是什麼 j2ee 伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回乙個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅...