S Q L 优化

在应用的的开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化。

优化SQL语句的一般步骤

  • 通过show status命令了解各种SQL的执行频率

MySQL客户端连接成功后,通过show [session|global]status命令可以提供服务器状态信息,

session:当前连接的统计;

global:自数据库上次启动至今的统计结果;

执行 show  global status like 'Com_%';                         //列出自数据库上次启动至今的统计结果。

如上说明:

上面这些参数对于所有存储引擎的表操作都会进行累计。下面这几个参数只是针对InnoDB存储引擎的,累加的算法也略有不同。

  • Innodb_rows_read:select查询返回的行数。
  • Innodb_rows_inserted:执行INSERT操作插入的行数。
  • Innodb_rows_updated:执行UPDATE操作更新的行数。
  • Innodb_rows_deleted:执行DELETE操作删除的行数。

通过以上几个参数,可以很容易地了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论ᨀ交还是回滚都会进行累加。

对于事务型的应用,通过Com_commit和Com_rollback可以了解事务ᨀ交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题

  •      使用explain来分析:

可以通过EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序,

     explain select * from dvbprogram group by name;

     Type:System>const>eq_ref>all(是性能最差的)

经过以上步骤,基本就可以确认问题出现的原因。此时用户可以根据情况采取相应的措施,进行优化ᨀ高执行的效率。

在上面的例子中,已经可以确认是对dvbprogram 表的全表扫᧿导致效率的不理想,那么对dvbprogram 表的name字段创建索引,具体如下:

当表引擎为:INNDB时

explain select * from dvbprogram  where name='test'; 

扫描的行数就变成了1行;

可见索引的使用可以大大ᨀ高数据库的访问速度,尤其在表很庞大的时候这种优势更为明显。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sql SQL全称是“结构化查询语言(Structured Query Language)”,最早的是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言,得到了广泛的应用。如今无论是像Oracle ,Sybase,Informix,SQL server这些大型的数据库管理系统,还是像Visual Foxporo,PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。 SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。他不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操纵对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语言可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的一个单独事件只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。 SQL同时也是数据库文件格式的扩展名。 SQL语言包含4个部分: 数据查询语言(SELECT“查询”语句) 数据操纵语言(INSERT"插入”, UPDATE“修正.更新”, DELETE“删除”语句) 数据定义语言(如CREATE"建立", DROP等语句) DROP TABLE "删除资料表定义以及所有的资料、索引、触发程序、条件约束以及资料表的权限" 数据控制语言(如COMMIT"提交”, ROLLBACK"重新运行"等语句)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值