您好,登錄后才能下訂單哦!
數據庫相關基礎是怎么樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
數據庫相關基礎
0.1數據庫基礎 ---------------------------------
這段代碼有什么不足之處?
try {
Connection conn = ...;
Statement stmt = ...;
ResultSet rs = stmt.executeQuery("select * from table1");
while(rs.next()) {}
} catch(Exception ex) { }
答:沒有finally語句來關閉各個對象,另外,使用finally之后,要把變量的定義放在try語句塊的外面,以便在try語句塊之外的finally塊中仍可以訪問這些變量。
0.1.1 不借助第三方工具,怎樣查看sql的執行計劃?
set autot on
explain plan set statement_id = &item_id for &sql;
select * from table(dbms_xplan.display);
0.2數據庫應用 ---------------------------------
0.2.1 大數據量下的分頁解決方法。
答:最好的辦法是利用sql語句進行分頁,這樣每次查詢出的結果集中就只包含某頁的數據內容。再sql語句無法實現分頁的情況下,可以考慮對大的結果集通過游標定位方式來獲取某頁的數據。
sql語句分頁,不同的數據庫下的分頁方案各不一樣,下面是主流的三種數據庫的分頁sql:
sql server:
String sql =
"select top " + pageSize + " * from students where id not in" +
"(select top " + pageSize * (pageNumber-1) + " id from students order by id)" +
"order by id";
mysql:
String sql =
"select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;
oracle:
String sql =
"select * from " +
(select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesize*pagenumber + ") as t" +
"where t>" + pageSize*(pageNumber-1);
0.2.2 oracle index ?
1.index需要儲存空間和I/O操作。
2.index的目的是加快select的速度的。
3.insert,update,delete數據oracle會同時對索引進行相應的調整,因此會增加一定的消耗。
4.使用index一定能加快select速度嗎?不是的,數據少和巨大時index會影響select的速度,因此如果查詢速度可以滿足,就不要建index。
5.Index 對null 無效。
說說索引的組成?
索引列、rowid
0.2.3 數據庫性能優化主要一下幾個方面:?
1、sql語句的執行計劃是否正常
2、減少應用和數據庫的交互次數、同一個sql語句的執行次數
3、數據庫實體的碎片的整理(特別是對某些表經常進行insert和delete動作,尤其注意,索引字段為系列字段、自增長字段、時間字段,對于業務比較頻繁的系統,最好一個月重建一次)
4、減少表之間的關聯,特別對于批量數據處理,盡量單表查詢數據,統一在內存中進行邏輯處理,減少數據庫壓力(java處理批量數據不可取,盡量用c或者c++ 進行處理,效率大大提升)
5、對訪問頻繁的數據,充分利用數據庫cache和應用的緩存
6、數據量比較大的,在設計過程中,為了減少其他表的關聯,增加一些冗余字段,提高查詢性能
0.2.4 Oracle用了多久?char與varchar2的區別?
Char是固定長度字符串,varchar2是變長字符串。
比如在char(10)和varchar2(10)中插入test字符串那么char(10)類型長度就是10,不足的用空格補齊,而varchar2(10)類型長度就是4。
0.2.5 如何跟蹤某個session的SQL?
exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);
select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);
exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);
0.3數據庫架構和擴展 ---------------------------------
0.3.1 ACID, BASE和CAP概念解釋?
分布式領域CAP理論
Consistency(一致性), 數據一致更新,所有數據變動都是同步的,最終一致性
Availability(可用性), 好的響應性能
Partition tolerance(Tolerance of network Partition分區容錯性) 網絡分區容忍性(可理解為部分節點故障或節點之間連接故障下系統仍可正常工作)
定理:任何分布式系統只可同時滿足二點,沒法三者兼顧。
忠告:架構師不要將精力浪費在如何設計能滿足三者的完美分布式系統,而是應該進行取舍。
什么是ACID?
DBMS 強調ACID:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性 (Durability)。其中的一致性強調當程序員定義的事務完成時,數據庫處于一致的狀態,如對于轉帳來說,事務完成時必須是A少了多少錢B就多了多 少錢。
什么是BASE?
BASE:Basically Availble --基本可用;Soft-state --;Eventual Consistency --最終一致性
0.3.2 說出數據連接池的工作機制是什么?
J2EE服務器啟動時會建立一定數量的池連接,并一直維持不少于此數目的池連接。客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接并將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。
實現方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關連接,而是把它代理的Connection對象還回到連接池中。
0.3.3 DELETE和TRUNCATE的區別?
答:1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。
2、TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
3、TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能觸發任何DELETE觸發器。
5、不能授予任何人清空他人的表的權限。
6、當表被清空后表和表的索引講重新設置成初始大小,而delete則不能。
7、不能清空父表。
比較truncate和delete 命令?
解答:兩者都可以用來刪除表中所有的記錄。區別在于:
truncate是DDL操作,它移動HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花費較長時間.
0.3.4 索引重建的概念? 說說索引重建的意義?
當我們創建索引時,oracle會為索引創建索引樹,表和索引樹通過rowid(偽列)來定位數據。當表里的數據發生更新時,oracle會自動維護索引樹。但是在索引樹中沒有更新操作,只有刪除和插入操作。
例如在某表id列上創建索引,某表id列上有值“101”,當我將“101”更新為“110”時,oracle同時會來更新索引樹,但是oracle先將索引樹中的“101”標示為刪除(實際并未刪除,只是標示一下),然后再將“110”寫到索引樹中。
如果表更新比較頻繁,那么在索引中刪除標示會越來越多,這時索引的查詢效率必然降低,所以我們應該定期重建索引。來消除索引中這些刪除標記。
一般不會選擇先刪除索引,然后再重新創建索引,而是rebuild索引。在rebuild期間,用戶還可以使用原來的索引,并且rebuild新的索引時也會利用原來的索引信息,這樣重建索引會塊一些。
0.3.5 如何查看生產環境數據庫服務器SQL性能狀態?
TKPROF SQL trace 工具收集正在執行的SQL的性能狀態數據并記錄到一個跟蹤文件中。 這個跟蹤文件提供了許多有用的信息,例如解析次數。執行次數,CPU使用時間等。這些數據將可以用來優化你的系統。
設置SQL TRACE在會話級別:
有效
ALTER SESSION SET SQL_TRACE TRUE
設置SQL TRACE 在整個數據庫有效性, 你必須將SQL_TRACE參數在init.ora中設為TRUE, USER_DUMP_DEST參數說明了生成跟蹤文件的目錄
關于數據庫相關基礎是怎么樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。