博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql优化理解笔记(持续更新)
阅读量:5276 次
发布时间:2019-06-14

本文共 1220 字,大约阅读时间需要 4 分钟。

主要包括存储引擎、索引、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值;查看具体的花费时间

转载于:https://www.cnblogs.com/legendheng/p/9108758.html

你可能感兴趣的文章
编程中定义的方法报异常问题
查看>>
使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
.net中从GridView中导出数据到excel(详细)
查看>>
[LeetCode]Single Number II
查看>>
poj3216 Prime Path(BFS)
查看>>
使用IntelliJ IDEA 2016创建maven管理的Java Web项目
查看>>
R语言 线性回归
查看>>
Ubuntu下用cue文件对ape和wav文件自动分轨
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
DRF的版本控制,认证,权限和频率限制
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>