### Mysql性能优化

尽量不要写select * ,如果需要全表数据,使用select 加所有字段列名称查询代替*
尽量减少字段列的数学计算,如:where num * 2 >= 30,可改为 where num >= 30/2
学会使用 explain 关键字 查看当前sql语句的优化程度
例如:
explain select * from emp where ename = "孙悟空"
table : 表名
type : 连接类型,从最差到最好分为 all(查询所有)、range(查询满足条件的)、 const(只有一条结果)。尽量不要用all类型的查询语句
key :索引名,如果该列没有索引,则为null
key_len : 索引长度,越短越好
rows : 扫描行数,该值是个预估值
extra : 详细说明,常见不太友好的值。如下:Using filesort ,Using temporary
1、当只要一行数据时使用 limit 1
表示只要第一页 第一条 数据,使用场景:
查询时已知会得到一条数据,这种情况下加上 limit 1 可以提高查询性能。因为mysql 数据库引擎会在找到第一条结果停止搜索,而不是继续查询下一条是否符合条件直到查询完所有数据
2、选择正确的数据库引擎
MyISAS、InnoDB
MyISAS 适合大量查询的应用。如果有 update语句,会锁住整张表,直到结束才能执行其他查询操作。
InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB 是默认的 MySQL引擎。
3、索引添加
对于经常用来查询的字段,应该为它建立索引。提高以该字段为搜索条件的查询效率
添加方式:
1.添加PRIMARY KEY(主键索引):
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引) :
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引) :
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引) :
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引:
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
4、表创建
表关系
一对一
一对多:
一的一方:主表
多的一方:从表
外键:需要在从表新建一列作为外键,他的取值来源主表的主键
多对多:
中间表:中间表中最少应该由两个字段组成,这两个字段作为外键指向两张表的主键,又组成了联合主键。
在相对不严谨的项目中一般我们不创建表之间的关联(不使用外键关联)。都是使用代码控制他们逻辑上的关系。
 
5、数据库尽可能的使用 NOT NULL 填充
因为 select id from t where num is null 这样的 sql 也是可以的
Mysql难以优化引用可空列查询,它会使索引、索引统计和值更加复杂。可空列需要更多的存储空间,还需要mysql内部进行特殊处理。可空列被索引后,每条记录都需要一个额外的字节,还能导致MYisam 中固定大小的索引变成可变大小的索引
注意:但把NULL列改为NOT NULL带来的性能提示很小,除非确定它带来了问题,否则不要把它当成优先的优化措施,最重要的是使用的列的类型的适当性
6、13.2 select * from admin left join log on admin.admin_id = log.admin_id where log.admin_id>10 如何优化? ?
优化为: select * from (select * from admin where admin_id>10) T1 lef join log on T1.admin_id =log.admin_id。
使用 JOIN 时候,应该 用小的结果驱动大的结果(left join 左边表结果尽量小如果有条件应该放到左边先处理,
right join 同理反向),同时尽量把牵涉到多表联合的查询拆分多个 query(多个连表查询效率低,容易到之后锁表和
阻塞)
 
7、limit 的基数比较大时使用 between
例如:select * from admin order by admin_id limit 100000,10
优化为:select * from admin where admin_id between 1000000 and 1000010 order by admin_id。
8、尽量避免在列上做运算,这样导致索引失效
例如:select * from admin where year(admin_time)>2014
优化为: select * from admin where admin_time> '2014-01-01′
### Mysql 事务
1、事务的介绍
Transaction
事务只和DML(增删改)语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同
在mysql 中事务是自动提交的,因为单条语句执行成功是自动提交的
事务支持。开启、提交、回滚
2、事务的四大特性
原子性(A):事务是最小单位,不可再分
一致性(C):事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
隔离性(I):事务A和事务B之间具有隔离性
持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
* 事务四大特性之一————隔离性(isolation)
事物A和事物B之间具有一定的隔离性
隔离性有隔离级别(4个)
读未提交:read uncommitted
读已提交:read committed
可重复读:repeatable read
串行化:serializable
1、 read uncommitted 读未提交
- 事物A和事物B,事物A未提交的数据,事物B可以读取到
- 这里读取到的数据叫做“脏数据”
- 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别
2、read committed 读已提交
- 事物A和事物B,事物A提交的数据,事物B才能读取到
- 这种隔离级别高于读未提交
- 换句话说,对方事物提交之后的数据,我当前事物才能读取到
- 这种级别可以避免“脏数据”
- 这种隔离级别会导致“不可重复读取”
- Oracle默认隔离级别
3、repeatable read 可重复读
- 事务A和事务B,事务A提交之后的数据,事务B读取不到
- 事务B是可重复读取数据
- 这种隔离级别高于读已提交
- 换句话说,对方提交之后的数据,我还是读取不到
- 这种隔离级别可以避免“不可重复读取”,达到可重复读取
- 比如1点和2点读到数据是同一个
- MySQL默认级别
- 虽然可以达到可重复读取,但是会导致“幻像读”
4、serializable 串行读
- 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
- 这种隔离级别很少使用,吞吐量太低,用户体验差
- 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发

最新文章

  1. c语言实现的协程
  2. Error Creating Deployment 有关Tomcat配置问题
  3. Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
  4. 显示标题栏中标题左侧的小图icon
  5. 程序员的Epic Fail [0]
  6. shiro(二)自定义realm,模拟数据库查询验证
  7. MacOS软件默认安装路径
  8. http协议进阶(五)连接管理
  9. [LeetCode] 120. Triangle _Medium tag: Dynamic Programming
  10. node.js使用免费的阿里云ip查询获取ip所在地
  11. 金融量化分析【day113】:羊驼策略
  12. android 制作9.png图
  13. 3. CMake 系列 - 分模块编译&安装项目
  14. Devops路线
  15. 白鹭引擎 - 碰撞检测 ( hitTestPoint )
  16. Scala_方法、函数、柯里化
  17. JDK中线程组ThreadGroup
  18. 简单的表格json控件
  19. 整理打印PI值
  20. 跟bWAPP学WEB安全(PHP代码)--邮件头和LDAP注入

热门文章

  1. 阿里云ros实例
  2. SpringAOP的应用实例与总结
  3. 2016级算法期末上机-C.简单·Bamboo's Fight with DDLs III
  4. 利用atimicInteger cas的特性实现一个锁
  5. CentOS7 安装 Adobe Flash 看网络视频
  6. maven install时报错 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
  7. 2-4 js基础-事件对象小结
  8. C#(winform)为button添加背景图片,并去掉各种边框
  9. 认识HDFS分布式文件系统
  10. mysql 索引数据结构及原理