您的位置:首页 > 数据库 > MySQL

Mysql优化

2017-04-20 15:31 204 查看

数据库的优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过很多方面,从而使数据库提高效率

主要包括:

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

数据频繁更改,而且不需要再数据库中永久保存

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: