数据库相关基础是怎么样的

数据库相关基础是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

 数据库相关基础
  
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参数说明了生成跟踪文件的目录

关于数据库相关基础是怎么样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注云搜网行业资讯频道了解更多相关知识。


【AD】美国洛杉矶/香港/日本VPS推荐,回程电信CN2 GIA线路,延迟低、稳定性高、免费备份_搬瓦工

【AD】炭云:36元/年/1GB内存/20GB SSD空间/500GB流量/5Gbps端口/KVM/香港/国际线路LUMEN