一、建立索引

  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. python进行两个大数相加

    python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下: 思路: 1.将超长数转换成字符串 2.进行长度补零,即让两个要计算的字符串长度一样 ...

  2. Codeforces Round #392 (Div. 2) - A

    题目链接:http://codeforces.com/contest/758/problem/A 题意:给定N个城市的福利,国王现在想让每个城市的福利都一致.问最少需要花多少钱使得N个城市的福利值都一 ...

  3. 初学Java 求最大公约数

    import java.util.Scanner; public class GreatesCommonDivisor { public static void main(String[] args) ...

  4. ORACLE 查询所有表、外键、主键等信息

    Select   a.Owner 外键拥有者, a.Table_Name 外键表, c.Column_Name 外键列, b.Owner 主键拥有者, b.Table_Name 主键表, d.Colu ...

  5. HTML5 arc的例子

    demo.html <!DOCTYPE html> <html lang="zh"> <head> <meta charset=" ...

  6. Python 类的属性和实例属性 Python 的动态语言

    #定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa = 10... #对类 Aa实例化出一个实例 a1>>> a1 = Aa() &g ...

  7. C#基础提升系列——C# 泛型

    C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate Language,中间语言)代码紧密的集成.通过泛型,我们不必给不同的类型编写功能相 ...

  8. Struts2基础-4 -struts拦截器

    Struts2拦截器工作原理 拦截器围绕着 Action和 Result的执行而执行. Struts2拦截器的工作方式如图10.2所示.从上图中可以看出, Struts2拦截器的实现原理和 Servl ...

  9. PHP curl_multi_getcontent函数

    curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流 说明 string curl_multi_getcontent ( r ...

  10. BZOJ 3687: 简单题(dp+bitset)

    传送门 解题思路 设\(f(i)\)表示和为\(i\)时的方案数,那么转移方程为\(f(i)+=f(i-x)\),\(x\)为当前枚举到的数字,这样做是\(O(n\sum a_i)\)的,考虑优化.发 ...