sql 优化相关

选择合适的数据库引擎

Myisam存储引擎:如果表对事物要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎,比如论坛中的发帖表,回复表

Innodb存储引擎:对事物要求高,保存的数据都是重要数据.我们建议使用innodb,比如订单表,账号表

Myisam和innodb的区别: 

1. 事务安全,myisam不支持使用,而innodb支持 

2. 查询和添加速度,myisam不用支持事务就不用考虑同步锁,查找和添加的速度快 

3. 支持全文索引,myisam支持,innodb不支持 

4. 锁机制:myisam支持表锁,innodb支持行锁 

5. 外键:myisam不支持外键,innodb支持外键

选择合适的索引

索引是帮助DBMS高效获取数据的数据结构. 

分类:普通索引,唯一索引,主键索引,全文索引 

1.普通索引:允许重复的值出现 

2.唯一索引:除了不能有重复的记录外,其它和普通索引一样.(用户名;用户身份证;手机号) 

3.主键索引:是随着设定主键而创建的;也就是把某个列设为主键的时候,数据库就会给该列创建索引;唯一且没有null值 

4.全文索引:用来对表中文本域(char,varchar,text)进行索引,全文索引针对myisam

.使用索引的一些技巧

索引弊端: 

1. 占用磁盘空间. 

2. 对dml(插入,修改.删除)操作有影响,变慢 

使用场景: 

1. 肯定在where条件经常使用,如果不做查询就没有意义 

2. 该字段的内容不是唯一的几个值(sex). 

3. 字段内容不是频繁变化

具体技巧: 

1. 对于创建的多列索引(复合索引),不是使用的第一部分就不会使用索引(最左匹配) 

2. 对于使用like查询,查询如果是”%aaa”不会使用到索引,而”aaa%”会使用到索引 

3. 如果条件中有or,有条件没有使用索引,即使其中有条件带索引,也不会使用.简单来说,就是要求使用的所有字段,都必须单独使用时才能使用索引. 

4. 如果列类型是字符串,拿一定要在条件中将数据使用引号引用起来,否则索引失效 

5. 如果mysql估计使用全表扫描要比索引快,则不适用索引.例子:表里只有一条记录

数据库优化之分表

分表分为水平分表(按行)和垂直分表(按列)

水平:在实际操作中,mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉.水平分表能够很大程度的减少这些压力.

垂直:如果一张表中某个字段值非常多(长文本,二进制等),而且只有在很少的情况下会查询,比如商品的详情描述,这时候就可以把字段单个放到一个表,通过外键与原表关联起来

水平分表策略: 

1. 按时间分表:这种分表方式有一定的局限性,当数据有较强的时效性.如微博发布纪录,微信消息纪录等,这种数据很少会有用户查询几个月前的数据,这时可以按月分表 

2. 按区间范围分表:一般在有严格的自增id需求上,如按照user_id水平分表 

3. Hash分表(用的多):通过一个原始目标的id或者名称通过一定的hash算法计算出数据库存储表的表名,然后访问相应的表.

数据库的读写分离

一台数据库支持的最大并发连接数是有限的,如果用户并发访问太多,一台服务器满足不了要求时,可以集群处理.mysql的集群处理技术最常用的是读写分离,

1.主从同步:数据库最终会把数据持久化到磁盘,如果集群必须确保每个数据库服务器的数据时一致的.能改变数据库数据的操作都往主数据库去写,而其他的数据库从主数据库上同步数据 

2.读写分离:使用负载均衡来实现写的操作都往主数据.而读的操作都往从数据库去

数据库优化之缓存

在持久层(dao)和数据库(db)之间添加一个缓存层,如果用户访问的数据已经缓存起来时,在用户访问数据时从缓存中获取,不用访问数据库,而缓存是在操作内存,访问速度快

作用:减少数据库服务器压力,减少访问时间

SQL语句优化小技巧

DDL优化: 

1. 通过禁用索引来提供导入数据性能,这个操作主要针对有数据的表追加数据 

2. 关闭唯一校验 

3. 修改事务提交方式(导入)(变多次提交为一次)

DML优化: 把多条插入的语句合并为一条(变多次提交为一次)

DQL优化:

Order by 优化 

多用索引排序

普通结果排序(非索引排序)

Group by 优化:如果对排序的结果没有排序的需求,可以考虑在其后面加上order by nul

子查询优化

Or优化: 

1.or两边都是用索引字段做判读,性能好 

2.or两边,有一边不用,性能差 

3.如果name=”a” or name=”b”,这种方式,索引失效

    原文作者:Easy的幸福
    原文地址: https://www.jianshu.com/p/fba96e57f2a5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞