資料庫面試時常見的26個問題

来源:https://www.cnblogs.com/donleo123/archive/2019/10/10/11646081.html
-Advertisement-
Play Games

1. SQL語言包括哪些類型? 數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index 數據操縱:Select ,insert,update,delete 數據控制:grant,revoke 2. 內聯接,外聯接區別? 內連接是保證兩個 ...


1. SQL語言包括哪些類型?

數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index

數據操縱:Select ,insert,update,delete

數據控制:grant,revoke

2. 內聯接,外聯接區別?

內連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。

在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的行。分左連接、右連接、全連接三種。

等連接(內連接)、非等連接、自連接、外連接(左、右、全) 

Or hash join/merge join/nest loop(cluster join)/index join

1)內連接:只連接匹配的行 

select A.c1,B.c2 from A join B on A.c3 = B.c3;

2)左外連接:包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行 

select A.c1,B.c2 from A left join B on A.c3 = B.c3;

3)右外連接:包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行 

select A.c1,B.c2 from A right join B on A.c3 = B.c3;

4)全外連接:包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行 

select A.c1,B.c2 from A full join B on A.c3 = B.c3;

5)(theta)連接:使用等值以外的條件來匹配左、右兩個表中的行 

select A.c1,B.c2 from A join B on A.c3 != B.c3;

6)交叉連接:生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的每個行一一匹配 

select A.c1,B.c2 from A,B;

3. 什麼是存儲過程?用什麼來調用?

存儲過程是一個預編譯的SQL語句, 簡單的說存儲過程是為了完成某個資料庫中的特定功能而編寫的語句集,該語句集包括SQL語句(對數據的增刪改查)、條件語句和迴圈語句等。優點是允許模塊化的設計,就是說只需創建一次,以後在該程式中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個命令對象來調用存儲過程(CALL)。

4.觸發器的作用?

觸發器是一中特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。

5. 索引的作用?和它的優點缺點是什麼?

索引就一種特殊的查詢表,資料庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了資料庫的尺寸大小。

6. 什麼是記憶體泄漏?

一般我們所說的記憶體泄漏指的是堆記憶體的泄漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用完後要顯示釋放記憶體。當應用程式用關鍵字new等創建對象時,就從堆中為它分配一塊記憶體,使用完後程式調用free或者delete釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被泄漏了。

7. 如何維護資料庫的完整性和一致性?

儘可能使用約束,如check,主鍵,外鍵,非空欄位等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問資料庫都可以保證數據的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,編程複雜,效率低下。

8. 什麼是事務?什麼是鎖?

事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將一組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。

鎖:在所有的DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。共用鎖(只讀不寫)、排他鎖(可讀可寫)

9. 事務的隔離級別有哪些?

事務隔離級別包括: 原子性,即不可分割性,事務要麼全部被執行,要麼就全部不被執行; 一致性或可串性,事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態; 隔離性,在事務正確提交之前,不允許把該事務對數據的任何改變提供給任何其他事務; 持久性,事務正確提交後,其結果將永久保存在資料庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到保存。

10. 什麼叫視圖?游標是什麼?

視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。

游標:是對查詢出來的結果集作為一個單元來有效的處理。游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用游標,但是需要逐條處理數據的時候,游標顯得十分重要。游標用於定位結果集的行,通過判斷全局變數@@FETCH_STATUS可以判斷是否到了最後,通常此變數不等於0表示出錯或到了最後。

11. 什麼是主鍵?什麼是外鍵?

主鍵是表格裡的(一個或多個)欄位,只用來定義表格裡的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關係的約束。這種關係一般都涉及一個表格裡的主鍵欄位與另外一個表格(儘管可能是同一個表格)里的一系列相連的欄位。那麼這些相連的欄位就是外鍵。

主鍵在本表中是唯一的、不可為空的,外鍵可以重覆可以唯空;外鍵和另一張表的主鍵關聯,不能創建對應表中不存在的外鍵。

12. 對一個投入使用的線上事務處理表格有過多索引需要有什麼樣的性能考慮?

對一個表格的索引越多,資料庫引擎用來更新、插入或者刪除數據所需要的時間就越多,因為在數據操控發生的時候索引也必須要維護。

13、可以用什麼來確保表格裡的欄位只接受特定範圍里的值?

Check限制,它在資料庫表格裡被定義,用來限制輸入該列的值。 觸發器也可以被用來限制資料庫表格裡的欄位能夠接受的值,但是這種辦法要求觸發器在表格裡被定義,這可能會在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。

14. 什麼是相關子查詢?如何使用這些查詢?

經驗更加豐富的開發人員將能夠準確地描述這種類型的查詢。 相關子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外部查詢的值,從而形成一個類似於迴圈的狀況。

15. 使用索引查詢一定能提高查詢的性能嗎?為什麼?

通常,通過索引查詢數據比全表掃描要快.但是我們也必須註意到它的代價. 索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況: 基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%宜採用; 基於非唯一性索引的檢索 索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同

16. 查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不連續增長的列, 查詢語句?

select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by ID ) T) order by ID

 

17. 分頁查詢語句?

(1)mysql的分頁查詢

 

select o.* from (sql) o limit firstIndex,pageSize

 

 

(2)sqlserver2005的分頁查詢

select top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,*from(sql) as o where rownumber>firstIndex;

 

(3)oracle分頁查詢

select * from(select a.*,ROWNUM rn from(sql) a where ROWNUM<=(firstIndex+pageSize)) wherern>firstIndex

 

18. 如何優化資料庫,如何提高資料庫的性能?

1)給資料庫做索引,合理的索引能立即顯著地提高資料庫整個系統的性能。

2)在適當的情況下,儘可能的用存儲過程而不是SQL查詢。因為前者已經過了預編譯,運行速度更快。

3)優化查詢語句,通過高性能的查詢語句提高資料庫的性能。

19、說出一些資料庫優化方面的經驗?

用PreparedStatement 一般來說比Statement性能高。

有外鍵約束會影響插入和刪除性能,如果程式能夠保證數據的完整性,那在設計資料庫時就去掉外鍵。

根據掃描的原理,第一條子查詢語句要比第二條關聯查詢的效率高:

1)select e.name,e.salary where e.managerid=(select id from employee where name='zxx');

2)select e.name,e.salary,m.name,m.salary from employees e,employees m where e.managerid = m.id and m.name='zxx';

 

表中允許適當冗餘。如,主題帖的回覆數量和最後回覆時間等

將姓名和密碼單獨從用戶表中獨立出來。這可以是非常好的一對一的案例。

sql語句全部大寫,特別是列名和表名都大寫。特別是sql命令的緩存功能,更加需要統一大小寫,sql語句?發給oracle伺服器?語法檢查和編譯成為內部指令?緩存和執行指令。根據緩存的特點,不要拼湊條件,而是用?和PreparedStatment

還有索引對查詢性能的改進也是值得關註的。

20. 表與表之間的關聯關係

分為3種:一對一、一對多、多對多。

21. 事前觸發和事後觸發有何區別?語句級觸發和行級觸發有何區別?

事前觸發器運行於觸發事件發生之前,而事後觸發器運行於觸發事件發生之後。通常事前觸發器可以獲取事件之前和新的欄位值。語句級觸發器可以在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。

22. 資料庫設計的必要性及設計步驟

好的資料庫結構有利於:節省數據的存儲空間,能夠保證數據的完整性,方便進行資料庫應用系統的開發

設計不好的資料庫結構將導致:數據冗餘、存儲空間浪費和記憶體空間浪費

不管資料庫的大小和複雜程度如何,可以用下列基本步驟來設計資料庫:收集信息--標識對象--設計數據模型--標識每個對象--存儲的信息類型–標識對象之間的關係

23. 什麼是數據模型?什麼是規範化?

數據模型是一種標識實體類型及其實體間聯繫的模型。典型的數據模型有網狀模型、層次模型和關係模型。

從關係資料庫的表中,除去冗餘數據的過程稱為規範化。包括:精簡資料庫的結構,從表中刪除冗餘的列,標識所有依賴於其它數據的數據

24. 談談資料庫設計的三範式

第一範式的定義:如果一個表中沒有重覆組(即行與列的交叉點上只有一個值,而不是一組值),則這個表屬於第一範式(常記成1NF)。簡而言之:"每一欄位只存儲一個值"。例如:職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話 和一個家裡電話號碼)

第二範式的定義:如果一個表屬於1NF,任何屬性只依賴於關鍵字,則這個表屬於第二範式(常記成2NF )。簡而言之:必須先符合1NF的條件,且每一行都能被唯一的識別。將1NF轉換成2NF的方法是添加主鍵。例如:學號,姓名,課程名,成績

第三範式的定義:如果一個表屬於2NF,且不包含傳遞依賴性,則這個表是第三範式(常記成 3NF)。滿足3NF的表中不包含傳遞依賴。簡而言之:沒有一個非關鍵屬性依賴於另一個非關鍵屬性。例如:表一:學號,課程號,成績。 表二:學號,姓名,所在系,系名稱,系地址。表三:課程號,課程名,學分

25. union和union all有什麼不同?

Union和Union All的區別之一在於對重覆結果的處理。 UNION在進行錶鏈接後會篩選掉重覆的記錄,所以在錶鏈接後會對所產生的結果集進行排序運算,刪除重覆的記錄再返回結果。實際大部分應用中是不會產生重覆的記錄,最常見的是過程表與歷史表UNION。如: select * from gc_dfys union select * from ls_jg_dfys 這個SQL在運行時先取出兩個表的結果,再用排序空間進行排序刪除重覆的記錄,最後返回結果集,如果表數據量大的話可能會導致用磁碟進行排序。 而UNION ALL只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重覆的數據,那麼返回的結果集就會包含重覆的數據了。 從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重覆的數據的話,那麼就使用UNION ALL

26. 設計資料庫應註意那些問題?

(1)原始單據與實體之間的關係

可以是一對一、一對多、多對多的關係。在一般情況下,它們是一對一的關係:即一張原始單據對應且只對應一個實體。在特殊情況下,它們可能是一對多或多對一的關係,即一張原始單證對應多個實體,或多張原始單證對應一個實體。這裡的實體可以理解為基本表。明確這種對應關係後,對我們設計錄入界面大有好處。

〖例1〗:一份員工履歷資料,在人力資源信息系統中,就對應三個基本表:員工基本情況表、社會關係表、工作簡歷表。這就是“一張原始單證對應多個實體”的典型例子。

(2)主鍵與外鍵

一般而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處於葉子部位的實體, 可以定義主鍵,也可以不定義主鍵(因為它無子孫), 但必須要有外鍵(因為它有父親)。主鍵與外鍵的設計,在全局資料庫的設計中,占有重要地位。當全局資料庫的設計完成以後,有個美國資料庫設計專家說:“鍵,到處都是鍵,除了鍵之外,什麼也沒有”,這就是他的資料庫設計經驗之談,也反映了他對信息系統核心(數據模型)的高度抽象思想。因為:主鍵是實體的高度抽象,主鍵與

外鍵的配對,表示實體之間的連接。

(3)基本表的性質

基本表與中間表、臨時表不同,因為它具有如下四個特性:

1)原子性。基本表中的欄位是不可再分解的。

2)原始性。基本表中的記錄是原始數據(基礎數據)的記錄。

3)演繹性。由基本表與代碼表中的數據,可以派生出所有的輸出數據。

4)穩定性。基本表的結構是相對穩定的,表中的記錄是要長期保存的。

理解基本表的性質後,在設計資料庫時,就能將基本表與中間表、臨時表區分開來。

(4)範式標準

基本表及其欄位之間的關係, 應儘量滿足第三範式。但是,滿足第三範式的資料庫設計,往往不是最好的設計。為了提高資料庫的運行效率,常常需要降低範式標準:適當增加冗餘,達到以空間換時間的目的。

〖例2〗:有一張存放商品的基本表,如表1所示。“金額”這個欄位的存在,表明該表的設計不滿足第三範式,因為“金額”可以由“單價”乘以“數量”得到,說明“金額”是冗餘欄位。但是,增加“金額”這個冗餘欄位,可以提高查詢統計的速度,這就是以空間換時間的作法。

在Rose 2002中,規定列有兩種類型:數據列和計算列。“金額”這樣的列被稱為“計算列”,而“單價”和“數量”這樣的列被稱為“數據列”。

表1 商品表的表結構

商品名稱 商品型號 單價 數量 金額

電視機 29吋 2,500 40 100,000

(5)通俗地理解三個範式

通俗地理解三個範式,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個範式,就必須通俗地理解三個範式(通俗地理解是夠用的理解,並不是最科學最準確的理解):

第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;

第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;

第三範式:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘。

沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高運

行效率,就必須降低範式標準,適當保留冗餘數據。具體做法是:在概念數據模型設計時遵守第三範式

,降低範式標準的工作放到物理數據模型設計時考慮。降低範式就是增加欄位,允許冗餘。

(6)要善於識別與正確處理多對多的關係

若兩個實體之間存在多對多的關係,則應消除這種關係。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一個多對多的關係,現在變為兩個一對多的關係。要將原來兩個實體的屬性合理地分配到三個實體中去。這裡的第三個實體,實質上是一個較複雜的關係,它對應一張基本表。一般來講,資料庫設計工具不能識別多對多的關係,但能處理多對多的關係。

〖例3〗:在“圖書館信息系統”中,“圖書”是一個實體,“讀者”也是一個實體。這兩個實體之間的關係,是一個典型的多對多關係:一本圖書在不同時間可以被多個讀者借閱,一個讀者又可以借多本圖書。為此,要在二者之間增加第三個實體,該實體取名為“借還書”,它的屬性為:借還時間、借還標誌(0表示借書,1表示還書),另外,它還應該有兩個外鍵(“圖書”的主鍵,“讀者”的主鍵),使它能與“圖書”和“讀者”連接。

(7)主鍵PK的取值方法

PK是供程式員使用的表間連接工具,可以是一無物理意義的數字串, 由程式自動加1來實現。也可以是有物理意義的欄位名或欄位名的組合。不過前者比後者好。當PK是欄位名的組合時,建議欄位的個數不要太多,多了不但索引占用空間大,而且速度也慢。

(8)正確認識數據冗餘

主鍵與外鍵在多表中的重覆出現, 不屬於數據冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵欄位的重覆出現, 才是數據冗餘!而且是一種低級冗餘,即重覆性的冗餘。高級冗餘不是欄位的重覆出現,而是欄位的派生出現。

〖例4〗:商品中的“單價、數量、金額”三個欄位,“金額”就是由“單價”乘以“數量”派生出來的,它就是冗餘,而且是一種高級冗餘。冗餘的目的是為了提高處理速度。只有低級冗餘才會增加數據的不一致性,因為同一數據,可能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗餘(派生性冗餘),反對低級冗餘(重覆性冗餘)。

(9)E--R圖沒有標準答案

信息系統的E--R圖沒有標準答案,因為它的設計與畫法不是惟一的,只要它覆蓋了系統需求的業務範圍和功能內容,就是可行的。反之要修改E--R圖。儘管它沒有惟一的標準答案,並不意味著可以隨意設計。好的E—R圖的標準是:結構清晰、關聯簡潔、實體個數適中、屬性分配合理、沒有低級冗餘。

(10) 視圖技術在資料庫設計中很有用

與基本表、代碼表、中間表不同,視圖是一種虛表,它依賴數據源的實表而存在。視圖是供程式員使用資料庫的一個視窗,是基表數據綜合的一種形式, 是數據處理的一種方法,是用戶數據保密的一種手段。為了進行複雜處理、提高運算速度和節省存儲空間, 視圖的定義深度一般不得超過三層。 若三層視圖仍不夠用, 則應在視圖上定義臨時表, 在臨時表上再定義視圖。這樣反覆交迭定義, 視圖的深度就不受限制了。

對於某些與國家政治、經濟、技術、軍事和安全利益有關的信息系統,視圖的作用更加重要。這些系統的基本表完成物理設計之後,立即在基本表上建立第一層視圖,這層視圖的個數和結構,與基本表的個數和結構是完全相同。並且規定,所有的程式員,一律只准在視圖上操作。只有資料庫管理員,帶著多個人員共同掌握的“安全鑰匙”,才能直接在基本表上操作。請讀者想想:這是為什麼?

(11)中間表、報表和臨時表

中間表是存放統計數據的表,它是為數據倉庫、輸出報表或查詢結果而設計的,有時它沒有主鍵與外鍵(數據倉庫除外)。臨時表是程式員個人設計的,存放臨時記錄,為個人所用。基表和中間表由DBA維護,臨時表由程式員自己用程式自動維護。

(12) 完整性約束表現在三個方面

域的完整性:用Check來實現約束,在資料庫設計工具中,對欄位的取值範圍進行定義時,有一個Check按鈕,通過它定義欄位的值城。

參照完整性:用PK、FK、表級觸發器來實現。

用戶定義完整性:它是一些業務規則,用存儲過程和觸發器來實現。

(13) 防止資料庫設計打補丁的方法是“三少原則”

1) 一個資料庫中表的個數越少越好。只有表的個數少了,才能說明系統的E--R圖少而精,去掉了

重覆的多餘的實體,形成了對客觀世界的高度抽象,進行了系統的數據集成,防止了打補丁式的設計;

2)一個表中組合主鍵的欄位個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的

外鍵,所以組合主鍵的欄位個數少了,不僅節省了運行時間,而且節省了索引存儲空間;

3) 一個表中的欄位個數越少越好。只有欄位的個數少了,才能說明在系統中不存在數據重覆,且很少有數據冗餘,更重要的是督促讀者學會“列變行”,這樣就防止了將子表中的欄位拉入到主表中去,在主表中留下許多空餘的欄位。所謂“列變行”,就是將主表中的一部分內容拉出去,另外單獨建一

個子表。這個方法很簡單,有的人就是不習慣、不採納、不執行。

資料庫設計的實用原則是:在數據冗餘和處理速度之間找到合適的平衡點。“三少”是一個整體概念,綜合觀點,不能孤立某一個原則。該原則是相對的,不是絕對的。“三多”原則肯定是錯誤的。試想:若覆蓋系統同樣的功能,一百個實體(共一千個屬性) 的E--R圖,肯定比二百個實體(共二千個屬性)

的E--R圖,要好得多。

提倡“三少”原則,是叫讀者學會利用資料庫設計技術進行系統的數據集成。數據集成的步驟是將文件系統集成為應用資料庫,將應用資料庫集成為主題資料庫,將主題資料庫集成為全局綜合資料庫。集成的程度越高,數據共用性就越強,信息孤島現象就越少,整個企業信息系統的全局E—R圖中實體的

個數、主鍵的個數、屬性的個數就會越少。

提倡“三少”原則的目的,是防止讀者利用打補丁技術,不斷地對資料庫進行增刪改,使企業資料庫變成了隨意設計資料庫表的“垃圾堆”,或資料庫表的“大雜院”,最後造成資料庫中的基本表、代碼表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的信息系統無法維護而癱瘓。

“三多”原則任何人都可以做到,該原則是“打補丁方法”設計資料庫的歪理學說。“三少”原則是少而精的原則,它要求有較高的資料庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用“打補丁方法”設計資料庫的理論依據。

(14) 提高資料庫運行效率的辦法

在給定的系統硬體和系統軟體條件下,提高資料庫系統的運行效率的辦法是:

1)在資料庫物理設計時,降低範式,增加冗餘, 少用觸發器, 多用存儲過程。

2) 當計算非常複雜、而且記錄條數非常巨大時(例如一千萬條),複雜計算要先在資料庫外面,以文件系統方式用C++語言計算處理完成之後,最後才入庫追加到表中去。這是電信計費系統設計的經驗。

3)發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。

4)對資料庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩衝區個數。

5) 在使用面向數據的SQL語言進行程式設計時,儘量採取優化演算法。

總之,要提高資料庫的運行效率,必須從資料庫系統級優化、資料庫設計級優化、程式實現級優化,這三個層次上同時下功夫。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 隨著移動互聯網的發展,萬物互聯成為了可能,這種互聯所產生的數據也在爆髮式地增長,而這些數據恰好可以作為分析關係的有效原料。如果說以往的智能分析專註在每一個個體上,在移動互聯網時代則除了個體,這種個體之間的關係也必然成為我們需要深入分析的很重要一部分。在一項任務中,只要有關係分析的需求,知識圖譜就“有 ...
  • 1 BEGIN 2 FOR c IN ( SELECT COLUMN_NAME cn FROM all_tab_columns WHERE table_name = '表名' ) 3 loop 4 BEGIN 5 execute IMMEDIATE 'alter table 表名 rename co ...
  • 此題的難度在於,選擇部門的前三位高工資人員(註意,允許併列人員的存在)。 分析題目: 存在兩張表,則肯定需要使用 ; 需要選取相同部門的前三名,原本想使用 以及 ; 然而 以及 無法滿足併列前三名的要求,因此,只能對同張表使用 ,如果某個薪水滿足 小於三個,則此人薪水在部門前三; 綜上所述,答案如下 ...
  • 用SQLyog連接MySQL8.0(社區版:mysql-installer-community-8.0.15.0.msi),出現錯誤2058(Plugin caching_sha2_password could not be loaded:xxxx),通過查詢資料瞭解了該錯誤的原因併在本文中提出了該... ...
  • 做了那麼多年的開發第一次寫博客,一開始是沒想過要寫博客的,後來想寫,卻一直不敢寫,一個是怕自己寫的不好,誤導人家,二來是不太自信。現在想起寫博客是因為,真正的勇士敢於面臨淋漓的鮮血,希望能提高自己,也是做個記錄自己不容易忘記,如果有哪裡寫的不好的,希望各位海涵,給出意見與批評,讓我更上一層樓。謝謝。 ...
  • 此題,竟然一時間沒想到如何合理的解決方案,主要是有較長的時間沒有使用 與`NOT IN`. 也是一個手熟的活,需要經常鍛煉,以下是解題答案: ...
  • 以前使用 ,都是局限於單個數值使用,從未嘗試過多個數據使用 . 此題涉及兩個表,肯定需要使用 操作. 此外,需要選取每個 的最大數值,那麼肯定涉及 以及 操作. 綜合以上因素,答案如下所示: ...
  • 1、增加列 2、刪除列 3、修改欄位類型 4、重命名列: 5、重命名錶: 當修改表結構時,sql server會彈出對話框,顯示以下內容: 不允許保存更改。您所做的更改要求刪除並重新創建以下表。您對無法重新創建的表進行了更改或者啟用了“阻止保存要求重新創建表的更改”選項。 解決方案:菜單欄->工具- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...