设为首页 收藏本站
查看: 499|回复: 0

[经验分享] 常见数据库(Oracle/MySQL)开发中的问题集

[复制链接]
YunVN网友  发表于 2016-8-15 07:21:36 |阅读模式
  常见数据库(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
     
     
     
         

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-257922-1-1.html 上篇帖子: Oracle中spool命令实现的两种方法比较 下篇帖子: 查找oracle比较慢的session和SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表