MySQL优化

来源:互联网 发布:垃圾邮件分类算法 编辑:程序博客网 时间:2024/05/22 11:54

一、left join 优化

1、条件中尽量能够过滤一些行将驱动表变得小一点,用小表去驱动大表

2、右表的条件列一定要加上索引(主键、唯一索引、前缀索引等),最好能够使type达到range及以上(ref,eq_ref,const,system)

二、索引优化
索引讲解

1、索引字段使用的排序规则必须一致才能使用索引

三、Union跟Union ALL

  1. Union和Union All的区别之一在于对重复结果的处理。union去重,union all不去重
  2. UNION会自动排序(根据SELECT后面选择字段的顺序排序),Union All不会

尽量使用Union All

四、MySQL Explain
type详解:
最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL

MySQL Explain 详解

五、SQL优化

  1. 尽量避免在where 子句中对字段进行null判断,否者将导致引擎放弃使用索引进行全表扫描

  2. 尽量避免在 where 子句中使用 != 或 <> 操作符

  3. 尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描

  4. 尽量避免使用like‘%123%’,因为会使用全表扫描

  5. where 子句中使用参数,也会导致全表扫描

  6. 尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描,如substring,dateformate等

  7. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算

  8. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了

  9. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些

  10. 当只要一行数据时使用LIMIT 1

  11. 千万不要ORDER BY RAND

  12. 尽可能的使用NOT NULL

原创粉丝点击