美文网首页
sql 优化相关

sql 优化相关

作者: Easy的幸福 | 来源:发表于2018-08-15 13:40 被阅读0次

选择合适的数据库引擎

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”,这种方式,索引失效

相关文章

  • sql 优化相关

    选择合适的数据库引擎 Myisam存储引擎:如果表对事物要求不高,同时是以查询和添加为主的,我们考虑使用myisa...

  • MySQL慢查询日志相关笔记

    MySQL优化SQL,针对慢SQL语句的查询及相关配置。相关命令: 需要永久开启慢SQL查询日志,需要在my.in...

  • Hive优化实践1-数据倾斜及join无关的优化

    Hive SQL的各种优化方法基本 都和数据倾斜密切相关。 Hive的优化分为join相关的优化和join无关的优...

  • sql的相关优化

    一、某些数据库的函数会禁用mysql本身的查询缓存 例如,数据库中出现CURDATE(),NOW() 和 RAND...

  • 常用sql优化2019-09-27

    sql优化 sql优化.................................................

  • mysql数据库优化

    1. Mysql优化介绍 1.1 sql优化 a. sql优化分析b. 索引优化c. 常用sql优化d. 常用优化...

  • Mysql 优化

    1.Sql优化 1)sql优化分析2)索引优化3)sql语句优化4)一些常用的技巧优化 (正则、函数) 2.优化数...

  • MYSQL:SQL中优化相关

    MySQL优化-表之间JOIN的关键字ON和Where(01) https://www.cnblogs.com/t...

  • sql优化的一般策略

    sql 优化的一般策略:索引优化,sql改写,参数优化,优化器 索引优化 以select * from vvsho...

  • SQL语句优化, since 2022-04-22

    (2022.04.22 Fri)SQL语句的优化目的在于提高SQL语句的运行效率。注意SQL优化和数据库优化的区别...

网友评论

      本文标题:sql 优化相关

      本文链接:https://www.haomeiwen.com/subject/hzxwbftx.html