久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

數據庫相關基礎是怎么樣的

155次閱讀
沒有評論

共計 4047 個字符,預計需要花費 11 分鐘才能閱讀完成。

數據庫相關基礎是怎么樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

  數據庫相關基礎
 
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 服務器啟動時會建立一定數量的池連接,并一直維持不少于此數目的池連接??蛻舳顺绦蛐枰B接時,池驅動程序會返回一個未使用的池連接并將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。
    實現方式,返回的 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 參數說明了生成跟蹤文件的目錄

關于數據庫相關基礎是怎么樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計4047字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 吴旗县| 涟水县| 友谊县| 邢台县| 波密县| 英吉沙县| 尼勒克县| 龙川县| 黄梅县| 高阳县| 波密县| 新民市| 拉萨市| 白河县| 徐州市| 化州市| 德令哈市| 茌平县| 乡城县| 阿瓦提县| 磐安县| 项城市| 波密县| 英吉沙县| 图木舒克市| 石楼县| 上杭县| 长汀县| 阜南县| 青阳县| 吉林市| 翁牛特旗| 牡丹江市| 浠水县| 家居| 徐闻县| 土默特左旗| 和林格尔县| 靖边县| 郑州市| 库车县|