数据库的优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过很多方面,从而使数据库提高效率
主要包括:
1、 表的设计合理化
2、 Sql语句优化
3、 给表添加合适的索引
4、 分表技术(水平分割,垂直分割)
5、 定时清除垃圾数据,定时进行碎片整理
6、 多用存储过程,和触发器
7、 对mysql的配置进行一些优化
8、 读写分离
9、 服务器硬件是否要升级
数据库设计
步骤:
1、 充分了解需求
2、 标识实体
3、 标识属性
4、 标识关系
关系:
1、 一对一:两个表的主键是公共字段
2、 一对多:主键和非主键建立关系
3、 多对一:非主键和主键建立关系
4、 多对多:非主键和非主键建立关系
表的设计
数据库的设计第一步标识实体,实体确定之后在确定他的属性,根据实体属性和实体之间的关系我们可以画出(E_R图)实体关系图
然后将实体转成表,将属性转成字段,如果找不到一个合适的字段做主键,我们可以添加一个自动增长的列作为主键。
数据的规范化
仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构,范式是具有最小冗余的表结构。
先满足第一范式--------在满足第二范式----------------第三范式
1、 确保每列的原子性
第一范式用来规范化所有的字段,所有的字段都不可以再分。
(比如地址这个字段,如果不分类汇总,不排序,仅仅是起到一个字段的作用我们可以不拆分。(反三范式))
2、 第二范式:非主键必须依赖于主键(一个表只能描述一件事)
3、 消除传递依赖
第一范式约束的是所有的字段第二范式把表分成两部分(主键和非主键) 第三范式约束的是非主键部分的传递依赖。
Mysql一些命令
Show status; |
显示一些数据 |
Show status like ‘com_update’ ; |
显示执行了多少次更新 |
Show status like ‘com_insert’; |
显示执行了多少次添加 |
Show status like ‘com_delete’; |
显示执行了多少次删除 |
Show status likt ‘com_select’; |
显示执行了多少次查询语句 |
Show status like ‘uptime’; |
显示mysql数据库启动了多长时间,如果时间很长了,数据库表的存储过程引擎室myisam的,这时候就要注意要碎片整理。 |
Show [Session | global] status like ….., 如果不写,默认是会话级(session)
Show variables like ‘long query_time’ |
显示慢查询的时间,默认情况下超过10s为慢查询 |
Set long_query_time = 0.5 |
设置慢查询时间(超过0.5秒就为慢查询) |
定位慢查询(开启慢查询的日志)
一旦开启慢查询后,日志文件放在配置文件my.ini文件中查找datedir,默认情况下,是不会记录慢查询的日志文件的。怎么开启呢
第一步:关闭当前的mysql服务 net stop mysql
第二步:
给大表添加主键索引
- 打开mysql数据库的data文件夹,如果标的存储引擎室myisam,则可以看到一个表由三个文件组成
Emp.frm |
表结构 |
Emp.MYD |
表数据 |
Emp.MYI |
表的索引 |
再添加主键索引前会在myi的文件是1k,添加索引后,文件体积会变大很多。
创建索引
创建主键索引
创建普通索引:
create index 索引的名称 on 表名(字段);
查看索引
创建全文索引:
只有myisam存储引擎才支持全文索引,默认为indboo
索引的使用:
select * from articles where match(title,body) against(‘database’);
总结:
- 全文索引必须是myisam存储引擎
- Mysql自己的fulltext是不支持中文的,解决办法使用sphinx技术处理中文。
- 语法:match(字段)against(‘关键字’)
- 停止词:如果一个词超过50%,是不会做全文索引的。
唯一索引:
第一种方法:
create table stu(
stuid int primy key,
name varchar(10) unique);
)
第二种方法
如何使用索引
explain分析sql
- 如果用主键去查询,自动会使用主键索引
- 如何创建的是复合索引,只有左边的可以有,右边的不能用
- 模糊查询的时候,%和_写在左边是无用的,写在右边就用了索引
- 在条件查询语句中使用or,or的两边的字段都必须要有所引,有一个没有,索引就无法使用
- 如果一个字段是字符型的,必须用引号引起来。
如何选择mysql的存储引擎:
MyIsam |
1, 不支持事物 2, 查询和添加的效率很高 3, 碎片很多 |
适用于论坛 |
Innodb |
1, 支持事物 用来保存比较重要的数据 |
|
memory |
数据频繁更改,而且不需要再数据库中永久保存 |