主要包括存储引擎、索引、sql语句

一、存储引擎

目前最常见的是InnoDB和MyISAM两个存储引擎

(1)InnoDB:支持事务处理,提供行级锁、外键约束索引,行锁

(2)MyISAM:支持全文搜索,表锁

  对于经常需要增删改操作的表建议使用InnoDB,因为有事务处理(要么成功要么失败回滚),而需要大量查询操作的表建议用MyISAM

二、索引

索引可以大大提高MySQL的检索速度

  (1)普通索引:由关键字KEY或INDEX定义的索引,唯一任务就是加快访问速率

  (2)唯一索引:索引列的值必须唯一,但允许有空值,每个表可以有多个唯一索引,唯一索引不可以被其他表引用为外键

  (3)主键:主键索引是唯一索引的特定类型,它要求主键中的每个值都唯一,并且不能为空,每个表只能有一个主键,可以被其他表引用为外键

但是索引并不是越多越好,可能加快了select但又减慢了update和insert

  (1)维护重建索引要耗费时间,这种时间会随着数据量的增加而增加

  (2)索引需要占物理空间

  (3)对表的数据进行增删改时,索引需要动态的维护,这样就降低了数据的维护速度

  对于常用where及 order by 的列可以添加索引加快查询速率

三、sql语句

  (1)select时,不要用*,而是写需要获取的字段名,避免获取多余的数据浪费资源

   (2)select时,避免在 where 子句中使用 or 来连接条件,可以用union。select id from player where status=1 union select id from player where status=2;

   (3)尽量使用union all替代union,因为当结果集很大的时候,还要去移除重复的记录会很浪费资源,如果需要数据唯一的话,可以添加唯一索引

   (4)尽量使用inner join替代left join,因为inner join的效率更高,它只需选出能匹配的记录,不需要返回左表不能匹配的项

   (4)select时,where子句对表字段避免用对null值判断,尽量设置字段默认值为 0或其他

   (5)用exist和not exist 替换in和not in

   (6)避免在where查询时进行表达式操作

   (7)使用join代替子查询

   (8)可以使用explain分析sql执行效率

   (9)可以查看慢查询日志,查看哪些sql比较慢,对应进行修改,

      用set profiling=1;设置慢查询日志开启,

      用show profiles;查看慢查询日志内容,

      用show profile for query id值;查看具体的花费时间

mysql优化理解笔记(持续更新)的更多相关文章

  1. MySQL优化技巧【持续更新】

    前言 应用程序或web网页有时慢的像蜗牛爬似的,可能是网络原因,可能是系统架构原因,还有可能是数据库原因.那么如何提高数据库SQL语句执行速度呢?下面是积累的一些优化技巧,望对君有用. 正文 1.比较 ...

  2. BLE资料应用笔记 -- 持续更新

    BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...

  3. Mysql注入小tips --持续更新中

    学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...

  4. [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)

    持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...

  5. react-native-storage 使用笔记 持续更新

    React-native-storage是在AsyncStorage之上封装的一个缓存操作插件库,刚开始接触这个也遇到了一些问题,在这里简单记录总结一下,碰到了就记下来,持续更新吧 1.安卓下stor ...

  6. mysql日常笔记(持续更新)

    常用场景 sql_mode问题:http://blog.csdn.net/ccccalculator/article/details/70432123 连续日期补全/数据补零操作 在不使用存储过程和函 ...

  7. Mysql操作笔记(持续更新)

    1.mysqldump备份导出 备份成sql mysqldump -hlocalIp -uuserName -p --opt --default-character-set=utf8 --hex-bl ...

  8. Effective Java通俗理解(持续更新)

    这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...

  9. mysql 函数编程大全(持续更新)

    insert ignore insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据 如果您使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧 ...

随机推荐

  1. MyBatis(1)优点&介绍&工程

    本次全部学习内容:MyBatisLearning 一:jabc的相关说明: jdbc编程步骤: 加载数据库驱动 创建并获取数据库链接 创建jdbc statement对象 设置sql语句 设置sql语 ...

  2. 使用Timer组件_实现定时更改窗体颜色

    1 向窗体拖入Timer组件 2 更改其Enable属性为true 3 其interval属性为300 4 在Tick事件中写入随机变色代码 private void timer1_Tick(obje ...

  3. iPhone 耳机在PC电脑上使用方法

    把主声道(Master)从正中间调整到最左或者最右就行了

  4. react系列(一)JSX语法、组件概念、生命周期介绍

    JSX React中,推出了一种新的语法取名为JSX,它给了JS中写HTML标签的能力,不需要加引号.JSX的语法看起来是一种模板,然而它在编译以后,会转成JS语法,只是书写过程中的语法糖. JSX的 ...

  5. ESP8266 wifi干扰钓鱼实现

    说明:绝大部分都是对着下面的参考文章来做的.这里只把基本流程和我自己遇到的问题写一下.如有其他问题可以访问文章末的参考文章进行查找! esp8266模块 我们需要购买一块esp8266模块,如下图所示 ...

  6. iOS读取info.plist中的值

    在app运行的时候,需要读取info.plist中的信息,用以下代码可获取整个info.plist的信息 [[NSBundle mainBundle] infoDictionary] 以下为根据 ke ...

  7. pt-online-schema-change在线修改表结构

    工具简介 pt-osc模仿MySQL内部的改表方式进行改表,但整个改表过程是通过对原始表的拷贝来完成的,即在改表过程中原始表不会被锁定,并不影响对该表的读写操作.首先,osc创建与原始表相同的不包含数 ...

  8. 单文件版本的netframework的net core 2.1

    如果你还在用net4.5,如果你还在用netframework,又想使用netcore2.1的库或者功能,又觉得nuget动不动就好大,可以试试下面的这个. https://pan.baidu.com ...

  9. Wget 使用详解

    Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...

  10. mint-ui message box 问题;

    当引用 mint-ui message box 的 出现的问题,我暂时是不知道为什么: 官网是这样写的: 于是 我也这么做的:(这里用小写,具体我也不清楚,毕竟文档上写的也不是很清楚,但是只有这样写, ...