中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-29 10:36:58 來源:億速云 閱讀:141 作者:柒染 欄目:數據庫

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

 數據庫相關基礎
  
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參數說明了生成跟蹤文件的目錄

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

古交市| 临朐县| 绥芬河市| 洮南市| 阳山县| 枞阳县| 洞口县| 文成县| 临夏县| 仪陇县| 资阳市| 宾川县| 云龙县| 襄汾县| 娱乐| 罗田县| 南江县| 惠东县| 南皮县| 双柏县| 依兰县| 皮山县| 万全县| 徐汇区| 衡山县| 红原县| 方正县| 上杭县| 南宫市| 阳原县| 汝阳县| 白城市| 江城| 邓州市| 宜阳县| 永城市| 营山县| 息烽县| 昭苏县| 吉林省| 永嘉县|