溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫相關(guān)基礎(chǔ)是怎么樣的

發(fā)布時(shí)間:2021-11-29 10:36:58 來源:億速云 閱讀:133 作者:柒染 欄目:數(shù)據(jù)庫

數(shù)據(jù)庫相關(guān)基礎(chǔ)是怎么樣的,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

 數(shù)據(jù)庫相關(guān)基礎(chǔ)
  
0.1數(shù)據(jù)庫基礎(chǔ) ---------------------------------
這段代碼有什么不足之處?
    try {
      Connection conn = ...;
      Statement stmt = ...;
      ResultSet rs = stmt.executeQuery("select * from table1");
      while(rs.next()) {}
    } catch(Exception ex) { }
    答:沒有finally語句來關(guān)閉各個(gè)對(duì)象,另外,使用finally之后,要把變量的定義放在try語句塊的外面,以便在try語句塊之外的finally塊中仍可以訪問這些變量。

    0.1.1 不借助第三方工具,怎樣查看sql的執(zhí)行計(jì)劃?
         set autot on
         explain plan set statement_id = &item_id for &sql;
         select * from table(dbms_xplan.display);

  0.2數(shù)據(jù)庫應(yīng)用 ---------------------------------
   0.2.1 大數(shù)據(jù)量下的分頁解決方法。
    答:最好的辦法是利用sql語句進(jìn)行分頁,這樣每次查詢出的結(jié)果集中就只包含某頁的數(shù)據(jù)內(nèi)容。再sql語句無法實(shí)現(xiàn)分頁的情況下,可以考慮對(duì)大的結(jié)果集通過游標(biāo)定位方式來獲取某頁的數(shù)據(jù)。
    sql語句分頁,不同的數(shù)據(jù)庫下的分頁方案各不一樣,下面是主流的三種數(shù)據(jù)庫的分頁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需要儲(chǔ)存空間和I/O操作。
    2.index的目的是加快select的速度的。
    3.insert,update,delete數(shù)據(jù)oracle會(huì)同時(shí)對(duì)索引進(jìn)行相應(yīng)的調(diào)整,因此會(huì)增加一定的消耗。
    4.使用index一定能加快select速度嗎?不是的,數(shù)據(jù)少和巨大時(shí)index會(huì)影響select的速度,因此如果查詢速度可以滿足,就不要建index。
    5.Index 對(duì)null 無效。
        說說索引的組成?
        索引列、rowid

   0.2.3 數(shù)據(jù)庫性能優(yōu)化主要一下幾個(gè)方面:?
        1、sql語句的執(zhí)行計(jì)劃是否正常
    2、減少應(yīng)用和數(shù)據(jù)庫的交互次數(shù)、同一個(gè)sql語句的執(zhí)行次數(shù)
    3、數(shù)據(jù)庫實(shí)體的碎片的整理(特別是對(duì)某些表經(jīng)常進(jìn)行insert和delete動(dòng)作,尤其注意,索引字段為系列字段、自增長字段、時(shí)間字段,對(duì)于業(yè)務(wù)比較頻繁的系統(tǒng),最好一個(gè)月重建一次)
    4、減少表之間的關(guān)聯(lián),特別對(duì)于批量數(shù)據(jù)處理,盡量單表查詢數(shù)據(jù),統(tǒng)一在內(nèi)存中進(jìn)行邏輯處理,減少數(shù)據(jù)庫壓力(java處理批量數(shù)據(jù)不可取,盡量用c或者c++ 進(jìn)行處理,效率大大提升)
    5、對(duì)訪問頻繁的數(shù)據(jù),充分利用數(shù)據(jù)庫cache和應(yīng)用的緩存
    6、數(shù)據(jù)量比較大的,在設(shè)計(jì)過程中,為了減少其他表的關(guān)聯(lián),增加一些冗余字段,提高查詢性能

0.2.4 Oracle用了多久?char與varchar2的區(qū)別?
    Char是固定長度字符串,varchar2是變長字符串。
    比如在char(10)和varchar2(10)中插入test字符串那么char(10)類型長度就是10,不足的用空格補(bǔ)齊,而varchar2(10)類型長度就是4。

 0.2.5 如何跟蹤某個(gè)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數(shù)據(jù)庫架構(gòu)和擴(kuò)展 ---------------------------------
   0.3.1 ACID, BASE和CAP概念解釋?
        分布式領(lǐng)域CAP理論
    Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動(dòng)都是同步的,最終一致性
    Availability(可用性), 好的響應(yīng)性能
    Partition tolerance(Tolerance of network Partition分區(qū)容錯(cuò)性) 網(wǎng)絡(luò)分區(qū)容忍性(可理解為部分節(jié)點(diǎn)故障或節(jié)點(diǎn)之間連接故障下系統(tǒng)仍可正常工作)
    定理:任何分布式系統(tǒng)只可同時(shí)滿足二點(diǎn),沒法三者兼顧。
    忠告:架構(gòu)師不要將精力浪費(fèi)在如何設(shè)計(jì)能滿足三者的完美分布式系統(tǒng),而是應(yīng)該進(jìn)行取舍。
    什么是ACID?
      DBMS 強(qiáng)調(diào)ACID:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性 (Durability)。其中的一致性強(qiáng)調(diào)當(dāng)程序員定義的事務(wù)完成時(shí),數(shù)據(jù)庫處于一致的狀態(tài),如對(duì)于轉(zhuǎn)帳來說,事務(wù)完成時(shí)必須是A少了多少錢B就多了多 少錢。
    什么是BASE?
     BASE:Basically Availble --基本可用;Soft-state --;Eventual Consistency --最終一致性
0.3.2 說出數(shù)據(jù)連接池的工作機(jī)制是什么?
    J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。
    實(shí)現(xiàn)方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關(guān)連接,而是把它代理的Connection對(duì)象還回到連接池中。
0.3.3 DELETE和TRUNCATE的區(qū)別?
    答:1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會(huì)被撤銷。
      2、TRUNCATE是一個(gè)DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對(duì)TRUNCATE使用ROLLBACK命令。
      3、TRUNCATE將重新設(shè)置高水平線和所有的索引。在對(duì)整個(gè)表和索引進(jìn)行完全瀏覽時(shí),經(jīng)過TRUNCATE操作后的表比DELETE操作后的表要快得多。
      4、TRUNCATE不能觸發(fā)任何DELETE觸發(fā)器。
      5、不能授予任何人清空他人的表的權(quán)限。
      6、當(dāng)表被清空后表和表的索引講重新設(shè)置成初始大小,而delete則不能。
      7、不能清空父表。
        比較truncate和delete 命令?
    解答:兩者都可以用來刪除表中所有的記錄。區(qū)別在于:
         truncate是DDL操作,它移動(dòng)HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花費(fèi)較長時(shí)間.

0.3.4 索引重建的概念? 說說索引重建的意義?
    當(dāng)我們創(chuàng)建索引時(shí),oracle會(huì)為索引創(chuàng)建索引樹,表和索引樹通過rowid(偽列)來定位數(shù)據(jù)。當(dāng)表里的數(shù)據(jù)發(fā)生更新時(shí),oracle會(huì)自動(dòng)維護(hù)索引樹。但是在索引樹中沒有更新操作,只有刪除和插入操作。
    例如在某表id列上創(chuàng)建索引,某表id列上有值“101”,當(dāng)我將“101”更新為“110”時(shí),oracle同時(shí)會(huì)來更新索引樹,但是oracle先將索引樹中的“101”標(biāo)示為刪除(實(shí)際并未刪除,只是標(biāo)示一下),然后再將“110”寫到索引樹中。
    如果表更新比較頻繁,那么在索引中刪除標(biāo)示會(huì)越來越多,這時(shí)索引的查詢效率必然降低,所以我們應(yīng)該定期重建索引。來消除索引中這些刪除標(biāo)記。
    一般不會(huì)選擇先刪除索引,然后再重新創(chuàng)建索引,而是rebuild索引。在rebuild期間,用戶還可以使用原來的索引,并且rebuild新的索引時(shí)也會(huì)利用原來的索引信息,這樣重建索引會(huì)塊一些。

0.3.5 如何查看生產(chǎn)環(huán)境數(shù)據(jù)庫服務(wù)器SQL性能狀態(tài)?
        TKPROF SQL trace 工具收集正在執(zhí)行的SQL的性能狀態(tài)數(shù)據(jù)并記錄到一個(gè)跟蹤文件中。 這個(gè)跟蹤文件提供了許多有用的信息,例如解析次數(shù)。執(zhí)行次數(shù),CPU使用時(shí)間等。這些數(shù)據(jù)將可以用來優(yōu)化你的系統(tǒng)。
     設(shè)置SQL TRACE在會(huì)話級(jí)別:
     有效
     ALTER SESSION SET SQL_TRACE TRUE
     設(shè)置SQL TRACE 在整個(gè)數(shù)據(jù)庫有效性, 你必須將SQL_TRACE參數(shù)在init.ora中設(shè)為TRUE, USER_DUMP_DEST參數(shù)說明了生成跟蹤文件的目錄

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI