小生博客:http://xsboke.blog.51cto.com
-------谢谢您的参考,如有疑问,欢迎交流
一、 数据库的类型
1) 第一代数据库:
基于层次模型与网状模型的数据库
2) 第二代数据库:
3) 第三代数据库
面向对象型数据库
1. 商业需求的影响
例:要求论坛帖子总量实时更新
1) Myisam存储引擎:
2)Innodb存储引擎:
2. 系统架构及实现的影响
1)二进制多媒体数据
2)超大文本数据
对于数据库管理软件,最大的性能瓶颈就在于磁盘的IO,当查询某个数据时,需要多次进行磁盘IO;将数据块加载到内存并且进行数据查找,当查询某个数据时,可能需要几百上千次进行这种磁盘IO的操作,所以在资源消耗方面是很大的,但是如果以不同的方式去寻找其中的某一点内容时,所需的IO次数可能相对就减少,这里说的也就是索引
就是数据库的数据结构
5. 硬件性能的影响
l cpu的处理能力
l 网络设备:交换路由、网线网卡等
1. 索引作用
索引通过减少磁盘IO而优化了查询速度,但是在一定程度上降低了增删改的性能,因为索引相当于一本书的目录,书的内容改变,索引也需要更新,而且索引是存放在物理文件中的,相对的也占用了磁盘空间
2. 索引的类型
索引一般分为B-tree、R-tree和全文索引,但是innodb存储引擎是不支持全文索引的,而且常用的索引就是B-tree索引也叫平衡树索引
3. B-tree索引的结构及原理
底层存放真实数据的叫叶子,而其他层都是非叶子节点
4. 索引的优点
5. 索引的缺点
索引是以文件形式存放在硬盘的,从一定程度上占用了硬盘空间
写数据时需要更新索引,这对数据库是个很大的开销
6. 不建议使用索引的情况
表记录较少时(一般为1000行)
索引的选择性较低时,比如有一列是性别,只有男女两种数据,这时选择性就较低
7. 索引的类型
索引包括单列索引和组合索引
1)普通索引
这是最基本的索引,它没有任何限制
CREATE INDEX indexName ON tablename(column1[,column2,……])
2)唯一索引
它与前面的普通索引类似,不同的就是索引列的值必须唯一,但允许空值,空值是指null。如果是组合索引,组合列的值必须唯一
CREATE UNIQUE INDEX indexName ON tablename(column1[,column2,……])
3)主键索引:一种特殊的唯一索引,不允许有空值,一般在建表的时候同时建立主键索引
CREATE TABLE tablename(ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
4)组合索引
为了进一步提升MysqL的效率,就要考虑建立组合索引,组合索引就是由多个列组成的索引
组合索引的有效列
5)全文索引(几乎不使用,一般用于对大数据进行查询时)
只用于MyISAM 表 对文本域进行索引。字段类型包括char、varchar、text
CREATE FULLTEXT INDEX indexname ON tablename(column)
8. 查询索引
MysqL> show index from 表名;
MysqL> show keys from 表名;
9. 在什么情况下需要建立索引,应该选择什么列建立索引
l 一般经常出现在where和join子句中的列需要建立索引
l 使用索引的注意事项
当在列上进行运算时,索引也会失效
MysqL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,
1. 基本思路
Explain工具可以模拟语句执行,然后通过输出结果得到语句的执行信息
Profiling工具可以使语句真实执行,并且通过输出结果得到语句的执行信息
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设置是否合理
Qcache_free_memory:Query Cache 中目前剩余的内存大小。
Qcache_inserts:表示多少次未命中然后插入。
Qcache_queries_in_cache:当前Query Cache 中cache 的Query 数量;
Qcache_total_blocks:当前Query Cache 中的block 数量;。
4) 关于query_cache的配置
6. Max_connect_errors:与MysqL安全有关的计数器值,最大错误连接数,
只对myisam存储引擎有效
清除计数器:重启MysqL服务或者使用命令flush hosts
7. Sort_buffer_site:排序缓冲区大小,只对myisam存储引擎有效
8. Max_allowed_packet:限制server接受的select、update语句包的大小,
只对myisam存储引擎有效
最大值为1GB
9. Join_buffer_size:影响带有多表查询类型语句的查询速度,
connection级参数,只对myisam存储引擎有效
10. Tread_cache_size:设置服务器线程缓存,只对myisam存储引擎有效
设置规则:1GB内存8个、2GB内存16个、3GB内存32个
11. Innodb_buffer_pool_size:相当于key_buffer_size对于MyISAM表的作用一样
根据MysqL手册,对于2G内存的机器,推荐值是1G(50%)。 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了。
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 :
MysqL 读入缓冲区大小。
和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
18. read_rnd_buffer_size:
19. bulk_insert_buffer_size :
批量插入数据缓存大小,可以有效提高插入效率,默认为8M。
20. binary log日志文件的配置参数
六、优化后通过MysqLslap工具可以进行测试
优化前
将所有优化语句写入,进行测试
七、 优化语句总结