(一)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
浙公网安备 33010602011771号