小生博客:http://xsboke.blog.51cto.com
-------谢谢您的参考,如有疑问,欢迎交流
一、 数据库的类型
1) 第一代数据库:
基于层次模型与网状模型的数据库
2) 第二代数据库:
关系型数据库
3) 第三代数据库
面向对象型数据库
二、 影响mysql性能的因素
1. 商业需求的影响
例:要求论坛帖子总量实时更新
1) Myisam存储引擎:
2)Innodb存储引擎:
2. 系统架构及实现的影响
1)二进制多媒体数据
2)超大文本数据
3. 查询语句对性能的浪费
对于数据库管理软件,最大的性能瓶颈就在于磁盘的IO,当查询某个数据时,需要多次进行磁盘IO;将数据块加载到内存并且进行数据查找,当查询某个数据时,可能需要几百上千次进行这种磁盘IO的操作,所以在资源消耗方面是很大的,但是如果以不同的方式去寻找其中的某一点内容时,所需的IO次数可能相对就减少,这里说的也就是索引
4. 数据库schema设计对性能的影响
就是数据库的数据结构
5. 硬件性能的影响
l 磁盘的I/O性能:内存、硬盘、网卡等
l CPU的处理能力
l 网络设备:交换路由、网线网卡等
三、mysql性能优化-----索引
1. 索引作用
索引通过减少磁盘IO而优化了查询速度,但是在一定程度上降低了增删改的性能,因为索引相当于一本书的目录,书的内容改变,索引也需要更新,而且索引是存放在物理文件中的,相对的也占用了磁盘空间
2. 索引的类型
索引一般分为B-tree、R-tree和全文索引,但是innodb存储引擎是不支持全文索引的,而且常用的索引就是B-tree索引也叫平衡树索引
3. B-tree索引的结构及原理

4. 索引的优点
5. 索引的缺点
6. 不建议使用索引的情况
7. 索引的类型
索引包括单列索引和组合索引
1)普通索引
2)唯一索引
3)主键索引:一种特殊的唯一索引,不允许有空值,一般在建表的时候同时建立主键索引
4)组合索引
5)全文索引(几乎不使用,一般用于对大数据进行查询时)
8. 查询索引
9. 在什么情况下需要建立索引,应该选择什么列建立索引
l 当表的记录较多,查询速度较慢时我们就需要通过建立索引的方式优化数据库的查询性能
l 一般经常出现在where和join子句中的列需要建立索引
l 使用索引的注意事项
MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,
四、mysql性能优化的思路
1. 基本思路
2. 索引优化
1)比如有用户投诉公司网站查询数据特别慢,这时需要我们优化数据库的查询性能,用户是不知道使用了什么sql语句的,所以需要我们去找到sql语句,并对其进行优化
2) 慢查询日志




3) 通过explain工具模拟语句执行,进行分析查询

4) 通过profiling工具对实际进行的查询语句进行分析,相比explain更准确

执行要测试的语句并查看反馈的信息

通过语句的query_id号可以查看语句执行的详细信息

五、 配置优化
就是my.cnf中的参数配置
1. Max_connections:最大连接数,只对myisam存储引擎有效
查看当前已经建立的连接

查看试图连接或已连接数

当连接大于最大连接数时,可能报错1040:too many connections
判断当前最大连接数的方法:

2. Back_log:mysql请求队列数,只对myisam存储引擎有效
当mysql并发连接数达到最大时,允许被放入队列的连接数
查看当前正在等待的队列数

3. Wait_timeout 和interactive_timeout,只对myisam存储引擎有效
非交互式和交互式的闲时超时时间

4. Key_buffer_size:索引缓冲区大小,只对myisam存储引擎有效
作用:
决定索引处理速度
优化方法:

5. Query_cache_size:查询缓存,简称QC,只对myisam存储引擎有效
1) 配置参数

2)作用:
3) 通过检查状态值‘Qcache%’可以判断QC设置是否合理

4) 关于query_cache的配置

6. Max_connect_errors:与mysql安全有关的计数器值,最大错误连接数,
只对myisam存储引擎有效
7. Sort_buffer_site:排序缓冲区大小,只对myisam存储引擎有效
8. Max_allowed_packet:限制server接受的select、update语句包的大小,
只对myisam存储引擎有效
9. Join_buffer_size:影响带有多表查询类型语句的查询速度,
connection级参数,只对myisam存储引擎有效
10. Tread_cache_size:设置服务器线程缓存,只对myisam存储引擎有效
11. Innodb_buffer_pool_size:相当于key_buffer_size对于MyISAM表的作用一样
12. innodb_flush_log_at_trx_commit:控制事务日志刷写的时间点
13. innodb_thread_concurrency :设置innodb线程的并发数量
14. innodb_log_buffer_size
15. innodb_log_file_size
16. innodb_log_files_in_group
17. read_buffer_size :
18. read_rnd_buffer_size:
19. bulk_insert_buffer_size :
20. binary log日志文件的配置参数
六、优化后通过mysqlslap工具可以进行测试
优化前

将所有优化语句写入,进行测试

七、 优化语句总结
