(一)MYSQL优化概述

a.表设计的合理化(符合3NF);

b.添加适当的索引(四种:普通索引、主键索引、唯一索引、全文索引)

c.分表技术(水平分割、垂直侵害)

d.读、写分离(负载均衡)

e.存储过程

f.对mysql配置的优化

  1、配置最大并发数

  2、调整缓存大小

g.mysql服务器硬件升级

h.定时清除不需要数据,定时进行碎片整理 --指令:"optimize table table_name";(针对MYISAM引擎)

数据库的分类:1.关系型数据库

       2.非关系型数据库

       3.NOSQL 数据库:MongoDB

数据库的三级结构:php程序-》DBMS数据库管理系统-》数据库

SQL分析工具:explain 语句

                              (二)慢查询

1.了解MYSQL 数据库的运行状态如何查询

      show [session/global]  status ...

  1.1当前MYSQL 运行时间 show status like 'uptime';

  1.2一共执行了多少次 CURD  show status like 'com_select';

  1.3总的连接数  show status like 'connections';

  1.4线程分样-show status like 'Threads%';

      1).Threads_cached                 线程缓存池

      2).Threads_connected            连接中的线程数

      3).Threads_created                已经创建的线程数

      4).Threads_running                正在执行的线程数

  1.5显示慢查询  show status like 'slow_queries';

2. 定位慢查询(默认时间是10秒)

  1.1修改MYSQL 慢查询时间

    查看:show variables like 'long_query_time';

    设置:set long_query_time = 1;

  1.2查看慢查询的次数:show status like 'slow_queries';

3.把慢查询的SQL记录到日志中去(默认不记录)

  方法:在启动MYSQL时,指定记录慢查询,可以在my.ini设置(不能版本有所区别)

4.在慢查询日志中可以查看到慢查询的SQL

              (三)索引

1.添加索引

  1.1主键索引添加

    1)建表时,把某一列设为主键,则该列就是主键索引

    2)建表后添加指令:alert table 表名 add primary key(列名);

  1.2普通索引:create index 索引名 on 表(列);

  1.3全文索引:match (字段名)  against ()

    注:针对文章,MYISAM有效,英文有效

  1.4唯一索引

  注:哪些适合添加索引:1.较频繁作为查询条件的字段应该创建

             2.唯一性太差不适合添加索引

             3.较频繁变动的字段不适合添加索引

2.查询索引

  1).desc 表名

  2).show index from  表名

  3).show keys from 表名

3.删除索引:alter table  表名 drop index 索引名 (主键指令不一样)

4.修改:先删除,再添加

索引使用注意事项:1.占用磁盘

         2.对dml(update,delete,insert)语句效率有影响

5.索引的使用

  5.1下列情况可能用到索引

    1).对于创建的多列索引,只要查询使用了最左边的列,索引一般会被使用到

    2).对于 like 查询,查询如果是 ‘%aaa’ 不会使用到索引,而‘aaa%’可以

  5.2下列情况不会使用到索引

    1).如果条件中有 OR ,即使其中有条件带也不会用到

    2).对于多列索引,不是使用最左边,则不会使用到

    3).like 查询 以'%'开头

    4).如果MYSQL估计使用全表扫描比使用索引快,则不使用

6.查看索引的使用率

指令:show status like '%Handler_read';

其中:handler_read_key            值越高越好

   handler_read_rnd_next    值越高效率越低

          (四)SQL的一些技巧

1.使用group by分组查询时会默认排序,降低了效率

禁止排序方法:select * from table_name group by id order by null;

2.使用join代替子查询

3.如果要在含有OR的查询中使用索引,则OR之间的每个条件都要加索引

 

4.选择合适的存储引擎

  MYISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除打操作,并且对事务完整性要求不高,其优势是访问速 度快

  InnoDB:提供了具有提交、回滚、崩溃恢复能力的事务安全。但对比MYISAM,写的效率会差一些,且会占用更多磁盘。

  memery:数据变化频繁,不需要入库,同时又频繁的查询和修改,考虑使用,如memcached.

  MYISAM 和InnoDB的区别:

    1.事务安全

    2.查询和添加速 度

    3.支持全文索引

    4.锁机制

    5.外键,MYISAM不支持外键,而InnoDB支持

5.定时完成数据备份

  1.手动备份

  2.使用定时器备份

  3.通过PHP的exec()函数完成

6.优化MYSQL配置----my.ini/my.cnf

  1.连接数:max_connections=100

  2.查询缓存:query_cache_size=15M

  3.端口:3306