一、建立索引

  1)考虑在 where 及 order by 涉及的列上建立索引

  2)对于模糊查询, 建立全文索引

  3)对于多主键查询,建立组合索引

二、避免陷阱

然而,一些情况下可能使索引无效:

  1)在 where 子句中对字段进行表达式操作

  2)在 where 子句中使用 or 来连接条件,如:

  select id from t where num=10 or num=20

    可以改为

select id from t where num=10
union all
select id from t where num=20

  3)在 where 子句中的“=”左边进行表达式运算(可能导致无法正确使用索引)

  4)在where 子句中使用参数,如:

select id from t where num=@num

  可以改为(强制使用索引):

select id from t with(index(索引名)) where num=@num

  5)如果该索引是组合索引,那么必须使用到该索引中的第一个字段作为查询条件, 而且尽可能让字段顺序与索引顺序一致

  6)并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引

三、语句优化建议

  1)慎用in 和 not in, 如:

select id from t where num in(1,2,3)

  可以替代为:

select id from t where num between 1 and 3

  2)用具体字段代替*

  3)少用VARCHAR、 TEXT、BLOB类型

  4)字段表示固定值, 使用ENUM类型代替varchar(内部使用TINYINT)

  5)尽可能的使用 varchar/nvarchar 代替 char/nchar (变长字段存储空间小,节省存储空间,对于查询来说,在一个相对较小的字段内搜索效率显然要高些)

  6)如果类型不限制, 用int代替varchar(字符串一个个被匹配, 而数值则一次被处理)

  7)避免频繁创建和删除临时表,以减少系统表资源的消耗

  8)避免频繁创建和删除临时表,以减少系统表资源的消耗

  9)尽量避免大事务操作,提高系统并发能力

四、使用工具

  1)任何优化都是基于数据基础的。

  2)比较语句执行时间, 必要时使用Explain来跟踪查询情况

Mysql语句优化建议的更多相关文章

  1. php代码优化,mysql语句优化,面试需要用到的

    首先说个问题,就是这些所谓的优化其实代码标准化的建议,其实真算不上什么正真意义上的优化,还有一点需要指出的为了一丁点的性能优化,甚至在代码上的在一次请求上性能提升万分之一的所谓就去大面积改变代码习惯, ...

  2. 从原理上理解MySQL的优化建议

    从原理上理解MySQL的优化建议 预备知识 B+树索引 mysql的默认存储引擎InnoDB使用B+树来存储数据的,所以在分析优化建议之前,了解一下B+树索引的基本原理. 上图是一个B+树索引示意图, ...

  3. MySql基础笔记(二)Mysql语句优化---索引

    Mysql语句优化--索引 一.开始优化前的准备 一)explain语句 当MySql要执行一个查询语句的时候,它首先会对语句进行语法检查,然后生成一个QEP(Query Execution Plan ...

  4. Mysql语句优化

    总结总结自己犯过的错,网上说的与自己的Mysql语句优化的想法. 1.查询数据库的语句的字段,尽量做到用多少写多少. 2.建索引,确保查询速度. 3.orm框架自带的方法会损耗一部分性能,这个性能应该 ...

  5. mysql语句优化原则

    有时候发现数据量大的时候查询起来效率就比较慢了,学习一下mysql语句优化的原则,自己在正常写sql的时候还没注意到这些,先记录下来,慢慢一点一点的学,加油! 这几篇博客写的都可以: https:// ...

  6. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  7. mysql语句优化总结(一)

    Sql语句优化和索引 1.Innerjoin和左连接,右连接,子查询 A.     inner join内连接也叫等值连接是,left/rightjoin是外连接. SELECT A.id,A.nam ...

  8. Mysql 语句优化技巧

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  9. mysql语句优化方案(网上流传)

    关于mysql处理百万级以上的数据时如何提高其查询速度的方法 最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法. 由于在参与的实际项目中发现当mysql表的数 ...

随机推荐

  1. HTML5:新元素来实现一下网页布局

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. springBoot+mysql+mybatis demo [基本配置] [遇到的问题]

    springBoot+mysql+mybatis的基本配置: 多环境 application.properties spring.profiles.active=dev spring.applicat ...

  3. redisTemplate 封装bitcout

    @Repositorypublic class RedisServiceExtend { @Autowired private RedisTemplate<String, String> ...

  4. QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库

    解决方法: 终端命令:sudo apt-get install libqt4-dev sudo apt-get install libgstreamer0.10-dev sudo apt-get in ...

  5. python 绘制三国人物关系图

    author:weizhendong data:2019.12.19 func:绘制三国演义人物关系图 """ import codecs import jieba.po ...

  6. 看图了解RocksDB

    它是一个高性能的Key-Value数据库.设计了完善的持久化机制,同时保证性能和安全性.能够良好的支持范围查询,因为K-V记录就是按照Key来排序的. 下图为写入的流程: ​ 可以看到主要的三个组成部 ...

  7. SpringMvc中乱码问题的解决

    一:如果是前台传递的数据有问题. 在tomcat的service.xml中加上: URIEncoding="UTF-8" <Connector URIEncoding=&qu ...

  8. HDU 6121 Build a tree —— 2017 Multi-University Training 7

    HazelFan wants to build a rooted tree. The tree has nn nodes labeled 0 to n−1, and the father of the ...

  9. java 序列化机制

    package stream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io ...

  10. delphi中如何将一整个文件读入内存

    来源 https://bbs.csdn.net/topics/390985048 分配一块大内存吧,要是一下申请不了64M那么大,就多申请几块小的,用个链表连起来.用FileStream类的方法读取文 ...