mysql常见的几个误区

以前在写java代码的时候,很少考虑数据库的性能问题,数据达到一定量的时候,数据库读写速度就会变慢,初学者很少去考虑这其中的原因,这些忽视的原因可能在你今后的公司会带来巨大的损失,尤其是涉及到金融计费统计这一块,这损失可想而知。在这里我总结了几点:

    1、数据如果存在大量的查询语句的时候,尤其是通过某个条件查询的时候,必须为该字段添加索引,

    2、count(column) 和 count(*) 是一个完全不一样的操作,所代表的意义也完全不一样,

    a. count(column) 是表示结果集中有多少个column字段不为空的记录
     b. count(*) 是表示整个结果集有多少条记录
  3、select a,b from … 比 select a,b,c from数据库访问的数据量几乎是一样的, 大多数关系型数据库都是按照行(row)的方式存储,而数据存取操作都是以一个固定大小的IO单元(被称作 block 或者 page)为单 位,一般为4KB,8KB… 大多数时候,每个IO单元中存储了多行,每行都是存储了该行的所有字段(lob等特殊类型字段除外)。
所以,我们是取一个字段还是多个字段,实际上数据库在表中需要访问的数据量其实是一样的
  4、优化方法:
1、尽量少 join
 MySQL 的优势在于简单,但这在某些方面其实也是其劣势。MySQL 优化器效率高,但是由于其统计信息的量有 限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join,一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够,所以性能 表现离 Oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。     
       2、尽量少排序
排序操作会消耗较多的 CPU 资源,所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL 的响应时间。
  3、尽量避免 select *
虽然select大多数时候并不会影响到 IO 量,但是当我们还存在 order by 操作的时候,select 子句中的字段多少会在很大程度上影响到我们的排序效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值