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

61次阅读
没有评论

共计 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 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
    实现方式,返回的 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字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)