Mysql数据库的优化技术

来源:互联网 发布:java启动exe程序 cmd 编辑:程序博客网 时间:2024/06/05 07:47

一、表的设计合理化(符合3NF)

1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF

2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现

3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放.


3NF : 但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余 


二、sql优化

定为慢查询:

1、set long_query_time=1 ;    //可以修改慢查询时间

2、SET GLOBAL slow_query_log = ON;   //开启慢查询日志


三、添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]

1、主键索引添加

当一张表,把某个列设为主键的时候,则该列就是主键索引

2、普通索引

3、全文索引

 1. 在mysql中fulltext 索引只针对 myisam生效

 2. mysql自己提供的fulltext针对英文生效->sphinx (coreseek) 技术处理中文

 3. 使用方法是 match(字段名..) against(‘关键字’)

4、唯一索引

①当表的某列被指定为unique约束时,这列就是一个唯一索引


为什么创建索引后,速度就会变快?

原理示意图:

 

索引使用的注意事项

索引的代价:

1.占用磁盘空间

2.对dml操作有影响,变慢(一般一个网站查询语句跟增删改的比例为9:1)

 

在哪些列上适合添加索引?

总结: 满足以下条件的字段,才应该创建索引.

a: 肯定在where条经常使用

b: 该字段的内容不是唯一的几个值(sex)

c: 字段内容不是频繁变化.


使用索引的注意事项:

1、对于使用like的查询,查询如果是  ‘%aaa’ 不会使用到索引‘aaa%’ 会使用到索引。



四、定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

五、读写[写: update/delete/add]分离

六、对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]

0 0