简单的mysql性能优化

数据库设计优化

1.适度的违反范式:遵循三大范式就会带来查询时经常需要join导致查询效率降低,基于性能要求,结合业务适度的做冗余

2.适度的建立索引:建立索引的同时会对数据库带来IO的牺牲–>更新操作速度会降低,因为每次对数据进行修改的时候会对索引进行重构,而且占据存储空间

建立索引的规则:
a.索引的字段必须是经常查询的字段where

b.索引是多个字段–关联索引,将两个字段作为联合索引,第一个字段要是经常作为查询条件的

c.索引的字段必须有足够的区分度

d.长字段支持前缀索引

3.对表进行水平划分
每年都有10万条 将这个表按照年区分建立表 log log_2015 log_2016

4.对表进行垂直划分
某些字段很长,占用的空间较大,检索的时候就需要进行大量的IO操作 将这个字段独立出一张表跟原表建立一对一的关系

5.选择适当的字段类型
主键–用四个字节的类型 短的 检索的时候范围小

6.文件图片等大文件有文件系统存储,挂载存储专门的硬盘,不用数据库windows 存在磁盘里ext2 fatt,数据库只存储文件路径(大字段bolb?)

7.外键要表示清楚 一般会建立外键索引,实际工作中一般不用外键 建立索引后增删改会降低

8.宁可集中批量操作,也不要频繁读写

9.数据库引擎 大部分都是innodb ,但是有时候也需要通过业务情况和生产情况来选取

SQL语句优化

1.慢日志/explain
慢日志:将执行语句较慢的保存在文件里面
explain:查询的执行计划

2.避免全表扫描,考虑where和order by的列建立索引

如何避免:
1.尽量避免在where子句中使用null值判断,这个时候会放弃扫描,所以应该设计默认值,例如0

2.尽量避免在where中使用!= 、<>,也是走全表扫描,可以用< 、<= 、> 、>= 、between and, in,做到不等于,这些会走扫描

3.尽量避免在where语句中使用or来连接,会放弃扫描走全表,可以改一改,可以使用union all,将两个语句拼接起来

4.能用between的时候,尽量不要用in,因为会慢

5.like语句避免使用 %%查询 后缀索引,前缀索引是允许的

6.尽量不要使用*作为结果列,数据量越大,传输越慢,还能节省应用服务器的内存(存在java服务器的内存)

7.尽量避免在where做列运算 就是函数

8.join操作中用小的结果驱动大的结果

9.分页在基数比较大的时候不要用limit,尽量换成between,;如id是自增的话就用between 10000000and 10000001000

10.不要使用rand获取随机条数记录

11.不要使用count(列名)表示多少个不为空的记录 使用count(*)表示整个结果集有多少条记录,数据库针对其进行了优化

12.不要做无谓的排序操作

13.强制使用索引,用于出现局部标量时from后有with(index(索引名))

14.尽量避免对字段使用表达式操作列select * from table where num/2=100; –>num = 200;

15.用exists代替in,能够提升效率

16.索引并不是越多越好,一张表中索引最好不要超过6个字段,尽量使用数字型字段,字节越少,检索越快

17.尽量使用varchar自动缩小代替 char不变

18.尽量避免创建临时表,会导致IO数据库性能降低

19.存储过程/函数 尽量避免使用游标,游标操作超过一万条,必须考虑改写,性能会降低

20.尽量避免大事物操作 大量重复值的建立集群索引 多列的建立组合索引 进行关键查询的覆盖

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值