---恢复内容开始---

设计表的时候

1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差)
2. 不要一张表放太多的数据     主表20~30个字段     其他表最好不超过20个
3. 最好不要有为Null的列,原因:https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg
4. 如果存储的字符串长度几乎相等,使用char定长字符串类型
5. varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表, 用主键来对应,避 免影响其他字段索引效率;
6. 小数类型为 decimal,禁止使用 float 和 double;float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不 正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
7. 禁用保留字,如desc、range、match、delayed 等,请参考 MySQL 官方保留字

查询表的时候

1. 最好不要使用联表查询(风险不可控)【理论上禁止】
2. 不要在字段当中进行函数运算【禁止】
3. 尽量不要使用now()函数进行查询【禁止】
4. 查询时只查询用到的字段,不要使用 “*”查询       说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。
5. 删除全表数据的时候用truncate而不是delete
6. 尽量不要使用模糊匹配 '%abc%'【理论上禁止】
7. sql语句不要写的过于复杂,逻辑判断尽量在内存中完成
8. 不要加入触发器
9. 使用explain查看执行计划
 
加索引的时候
1. 添加索引的字段一定要有很好的区分度【cardinality】
2. 更新数据的时候最好使用主键作为更新条件
3. 加入联合索引要把区分度高的字段放在前面
4. 不常访问的列不要加索引
5. 长字符串不要加索引,如果一定要加,选取字符串的前n位加上。(n根据实际情况设定,经验值不会超过20)
6. 唯一索引名为 uk_字段名;普通索引名则为 idx_字段名;
 

---恢复内容结束---

设计表的时候

1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差)
2. 不要一张表放太多的数据     主表20~30个字段     其他表最好不超过20个
3. 最好不要有为Null的列,原因:https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg
4. 如果存储的字符串长度几乎相等,使用char定长字符串类型
5. varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表, 用主键来对应,避 免影响其他字段索引效率;
6. 小数类型为 decimal,禁止使用 float 和 double;float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不 正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
7. 禁用保留字,如desc、range、match、delayed 等,请参考 MySQL 官方保留字

查询表的时候

1. 最好不要使用联表查询(风险不可控)【理论上禁止】
2. 不要在字段当中进行函数运算【禁止】
3. 尽量不要使用now()函数进行查询【禁止】
4. 查询时只查询用到的字段,不要使用 “*”查询       说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。
5. 删除全表数据的时候用truncate而不是delete
6. 尽量不要使用模糊匹配 '%abc%'【理论上禁止】
7. sql语句不要写的过于复杂,逻辑判断尽量在内存中完成
8. 不要加入触发器
9. 使用explain查看执行计划
 
加索引的时候
1. 添加索引的字段一定要有很好的区分度【cardinality】
2. 更新数据的时候最好使用主键作为更新条件
3. 加入联合索引要把区分度高的字段放在前面
4. 不常访问的列不要加索引
5. 长字符串不要加索引,如果一定要加,选取字符串的前n位加上。(n根据实际情况设定,经验值不会超过20)
6. 唯一索引名为 uk_字段名;普通索引名则为 idx_字段名;
7.少用数据库函数,比如sysdate(),可以改为传入一个当前时间
8.根据具体业务,创建联合索引
9.索引庞大会导致索引文件太大,可以加一张中间表来解决
     例如:报价中状态单据,定时任务扫描更新处理
10.xml文件里面没有添加jdbc-type,传入map类型,字段类型不符合的话,mysql会强制类型转换,但不会走索引
 

mysql实践:sql优化的更多相关文章

  1. mysql的sql优化案例

    前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...

  2. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  3. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  4. 基于MySQL 的 SQL 优化总结

    文章首发于我的个人博客,欢迎访问.https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 ...

  5. 【MySQL】SQL优化系列之 in与range 查询

    首先我们来说下in()这种方式的查询 在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效率,因为在一条索引里面,range字段后面的部分是不生效的. ...

  6. mysql索引sql优化方法、步骤和经验

    MySQL索引原理及慢查询优化 http://blog.jobbole.com/86594/ 细说mysql索引 https://www.cnblogs.com/chenshishuo/p/50300 ...

  7. (1.10)SQL优化——mysql 常见SQL优化

    (1.10)常用SQL优化 insert优化.order by 优化 1.insert 优化 2.order by 优化 [2.1]mysql排序方式: (1)索引扫描排序:通过有序索引扫描直接返回有 ...

  8. MySQL之SQL优化详解(一)

    目录 慢查询日志 1. 慢查询日志开启 2. 慢查询日志设置与查看 3.日志分析工具mysqldumpslow   序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explai ...

  9. Mysql的SQL优化指北

    概述 在一次和技术大佬的聊天中被问到,平时我是怎么做Mysql的优化的?在这个问题上我只回答出了几点,感觉回答的不够完美,所以我打算整理一次SQL的优化问题. 要知道怎么优化首先要知道一条SQL是怎么 ...

  10. BATJ解决千万级别数据之MySQL 的 SQL 优化大总结

    引用 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL 逻 ...

随机推荐

  1. BZOJ 2049洞穴探测

    辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可 ...

  2. 洛谷 题解 P2645 【斯诺克】

    吐槽一下这道题: 数据太水了!!! 请注意,这题如果你考虑了犯规的情况,那么你的分数...可能会和我一样,只有40分. 也就是说,这是一篇AC不了这道题的题解!!! 现在,我来讲一下这道题的正解: 两 ...

  3. 数学工具(三)scipy中的优化方法

    给定一个多维函数,如何求解全局最优? 文章包括: 1.全局最优的求解:暴力方法 2.全局最优的求解:fmin函数 3.凸优化 函数的曲面图 import numpy as np import matp ...

  4. GlusterFS 存储

    GlusterFS简介: 互联网四大开源分布式文件系统分别是:MooseFS.CEPH.Lustre.GusterFS. GluterFS最早由Gluster公司开发,其目的是开发一个能为客户提供全局 ...

  5. 笔记||Python3之文件的读写

    [文件的读模式]            文件的对象:文件的读写通过文件操作对象进行. Python2  -----  File Python3  -----  TextIOWrapper       ...

  6. 【算法】342- JavaScript常用基础算法

    一个算法只是一个把确定的数据结构的输入转化为一个确定的数据结构的输出的function.算法内在的逻辑决定了如何转换. 基础算法 一.排序 1.冒泡排序 //冒泡排序function bubbleSo ...

  7. 利用 Redis 来优化功能部署和错误分类

    来源:Redislabs 作者:Shabih Syed 翻译:Kevin (公众号:中间件小哥) 为了让系统运行更流畅,又避免 Knights Capital 在 2012 年犯下的 4.6 亿美元的 ...

  8. django基础之day09,多对多创建数据表的三种方式

    多对多三种创建方式 1.全自动(用在表关系不复杂的一般情况) class Book(models.Model): title=models.CharField(max_length=32) 多对多关系 ...

  9. 【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识

    类文件结构 一 概述 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机.Java 语言通过字节码的方式,在一定程度上解决 ...

  10. 《Java基础知识》Java类与类之间的关系

    类与类之间最常见的关系主要有三种:依赖(uses-a).聚合(has-a)和继承(is-a). 下面以在线书店订单系统为例,来详细的讲述这三种关系的概念. 在线书店订单系统的主要功能是:注册用户可以登 ...