常见数据库(Oracle/MySQL)开发中的问题集

常见数据库(Oracle/MySQL)开发中的问题集
    系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质 SQL语句之间的速度差别可达到上百倍,可见对于一
    个系统不是简单的能实现其功能就可以了,而是要写出高质量的SQL语句,提高系统的可用性。
   
    作为一名程序员,在开发的过程中,不仅仅是关注代码的编码,在与数据库打交道的代码逻辑我们应该需要谨慎的编写,以求避免系统性能的代码或SQL出现。下面是性能影响的排序(以影响程度排序)
    D1    业务逻辑(影响最大)
    D2    数据设计(表结构设计,数据建模)
    D3    应用程序设计(SQL语句的写法)
    -->以上三条都会与作为程序员的我们息息相关的!一个好的程序员,不仅是能编写漂亮的代码,还要有一定的数据设计能力,和优秀的SQL编写能力,即,能知晓如何编写出性能好的SQL语句,能够察觉到SQL语句的写法是否会影响到性能.....(个人拙见,大牛见笑)
    D4  数据库的逻辑结构 (索引,区间,段,表空间)
  D5  数据库操作 (参数和配置)
  D6  访问路径
  D7  内存分配情况
  D8  I/O 和物理设计 (DBA 与业务沟通)(峰值多大,使用周期)
  D9  资源的征用
  D10 操作系统的调节
 
  从上面来看,D1-D3 影响最大但比较难修改 (事先去做),而且责任大部分在程序员肩上。
 
  关注SQL语句中 where 的编写
  多数情况下,Oracle使用索引来更快的遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,造成优化器删去索引而使用全表扫描。所以,应清楚优化器根据何种原则来删除索引。
 
 
  关注数据库的N+1查询
 
 
  关注数据库的分页查询
  Oracle
      SELECT *
  FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
  where t2.r >= M

  例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:

  SELECT *
  FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
  Where t2.R >= 10

  MySQL
      SELECT * FROM 表名称 LIMIT M,N
      从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录
      select * from sys_option limit 10,20
     
  SQLServer
      从数据库表中的第M条记录开始取N条记录,利用关键字Top:值得注意的是如果SELECT语句中既有top,又有order by,那么,会从排序好的结果中选择:
      SELECT *
      FROM (SELECT TOP N * FROM
                  (SELECT TOP (M+N-1) * FROM TABLE_NAME ORDER BY 主键 DESC) TBL_1) TBL_2
      ORDER BY 主键 ASC
     
      Example here:(从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录)
      SELECT *
      FROM (SELECT TOP 20 *
      FROM (SELECT TOP 29 * FROM Sys_option ORDER BY sys_id DESC) T1 ) T2
      ORDER BY sys_id ASC
     
     
     
         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值