mysql db 问题 开发中_常见数据库(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

1

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-08-10 17:30

浏览 791

分类:数据库

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值