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语句
单机优化
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.频繁更改的数据不适合创建索引