Mysql优化详解

MySQL优化

1.简单了解一下Mysql的一些命令

查询数据库基本状态

	查询数据库基本状态
		1.数据库运行多久了
			show status like 'uptime';
		2.CRUD执行了多少次
			所有CRUD 
				show status like '%Com_%'
			查询执行次数
				show status like '%Com_select%'
			新增执行次数
				show status like '%Com_insert%'
			修改执行次数
				show status like '%Com_update%'
			删除执行次数
				show status like '%Com_delete%'
		3.查询所有连接数
			show status like 'connections'
		4.查看服务器响应的最大连接数
			show status like 'Max_used_connections'
	

2.定位慢查询

	1.查询慢查询次数
		show status like 'slow_queries'  
		show global status like 'slow_queries'
	2.查看和修改慢查询时间阈值
		show variables like ‘long_query_time’  /* 查询当前慢查询的时间,默认是10S*/
		set global  long_query_time=1  /*设置慢查询时间 ,不加global  关闭窗口就没有效果了*/
	3.把慢查询记录到日志中
		方式一:
			#开启慢查询
			slow-query-log = on 
			#慢查询日志的记录位置
			slow_query_log_file = 生成的地址/log/mysql_slow_query.log 
			#设置慢查询时间
			long_query_time = 1
		方式二:
			1.关掉原来的数据库
			2.以慢查询的重启数据库 
				mysqld.exe --safe-mode  --slow-query-log
			3.设置慢查询时间
			4.构造慢sql
			5.查看日志生成文件的地址,在my.ini配置文件中有地址

explain 分析 sql 语句

explain 需要解析的sql语句
explain 描述

单机优化

1.引入概念
	范式(规范)-常见有三种规范3NF
		什么样的表才是符合3NF (范式)
		表的范式,是首先符合1NF, 才能满足2NF , 进一步满足3NF
		(1) 1NF
			1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解.只要数据库是关系型数据库(mysql/oracle/db2/sysbase/sql server),就自动的满足1NF.关系型数据库中是不允许分割列的。
		(2) 2NF
			2NF:表中的记录是唯一的.通常我们设计一个主键来实现
		(3) 3NF
			即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放

存储引擎

	存储引擎 mysql:myisam,innodb,memory 三种
	1.存储引擎:
		  Myisam 与 innodb 区别
			1.myisam 不支持事务  innodb支持事务
			2.Myisam添加查询效率高 innodb 相对较低
			3.Myisam支持表锁 innodb支持行锁
			4.Myisam支持全文索引 innodb不吃
			5.Myisam不支持外键 innodb支持外键
2.使用场景
	 MyISAM存储引擎
		如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎
	INNODB存储引擎: 
		对事务要求高,保存的数据都是重要数据,我们建议使用INNODB
	Memory 存储
		比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory, 速度极快
3.具体操作
	1.创建表的时候指定引擎
		 Create table 表名(字段列表) engine 存储引擎名称;
		 列:
		 	CREATE TABLE test(id INT(20),name VARCHAR(20)) engine=INNODB
	2.修改引擎
	   alter table table_name engine=innodb;
	   列:
	  	 	alter table test engine = Myisam
	3.查询表使用的引擎
		右键表,选择对象信息,查看表类型

索引

概念
	说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行个正确的‘create index’,查询速度就可能提高百倍千倍,这可真有诱惑力。可是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的I/O。 
以空间换时间
索引-原理
索引(Index)是帮助DBMS高效获取数据的数据结构。
组织数据方式,及访问数据的api的封装。-list,set,map,数组
索引分类
普通索引:允许重复的值出现,可以在任何字段上面添加
唯一索引:除了不能有重复的记录外,其它和普通索引一样,可以在值是唯一的字段添加(用户名、手机号码、身份证、email,QQ),可以为null,并且可以有多个null
主键索引:是随着设定主键而创建的,也就是把某个列设为主键的时候,数据库就会給改列创建索引。这就是主键索引.唯一且没有null值(也被称为非聚集索引)
全文索引:用来对表中的文本域(char,varchar,text)进行索引, 全文索引针对MyISAM有用
索引的创建原则
1.唯一较差的字段不适合建立索引  比如性别
2.Where或者order by 后经常使用的字段应该创建索引
3.频繁更改的数据不适合创建索引
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值