- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库调研教程
数据库调研
mysql数据库优化
1.1 配置文件
1.1.1缓存索引和缓冲池
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances=1
pool-size可以缓存索引和行数据,对Innodb表来说非常重要,值越大,IO读写就越少,如果单纯的做 HYPERLINK /database/ \t /database/201501/_blank 数据库服务,该参数可以设置到电脑物理内存的80%
pool_instances可以开启多个内存缓冲池,参数非常影响测试结果,特别是非常高的IO负载时,innodb_buffer_pool_instances=8,当pool_size很小时,效率差别很大,而当pool_size较大时,innodb_buffer_pool_instances=1表现最出色。
1.1.2闲置连接时间
wait_timeout参数值。
interactive_timeout 参数值。
当某个mysql的连接闲置时间超过一定时间将会被强行关闭,默认是8小时,由于连接请求空闲时却白白占用内存资源,建议将闲置连接时间尽量减少。
Mysql根据客户端类型的不同,来根据wait_timeout或interactive_timeout的值来强行关闭,所以两个参数需配合使用,单独设置无效。
1.1.3最大连接数、堆栈大小
max_connections参数值(默认151)
back_log参数值(默认50)
堆栈大小即连接数超过max_connections值时,新的请求将被放在堆栈中,等待某一连接释放资源,当等待连接数超过back_log时,将不被授予连接资源。
如果项目支持外部菜单,建议适当调整最大连接数和堆栈大小。
1.1.4缓存的最大线程数
thread_cache_size参数值
在高并发情况下,如果该值设置得太小,就会有很多线程频繁创建和销毁,线程创建的开销会变大,查询效率也会下降。
1.2索引
1.2.1复合索引
直接拿官方文档解释: 假设索引建立在 (last_name, first_name) 上, 那么
SELECT * FROM test WHERE last_name=Widenius;
SELECT * FROM test
WHERE last_name=Widenius AND first_name=Michael;
SELECT * FROM test
WHERE last_name=Widenius
AND (first_name=Michael OR first_name=Monty);
SELECT * FROM test
WHERE last_name=Widenius
AND first_name =M AND first_name N;
以上几种情况都是可以用这个多列索引来加速查询。
以下是查询规则:
总结:联系实际情况,对于大数据量的历史数据表来说,查询条件应为where meterId and planTime;建立复合索引meterId、planTime对于and条件的查询有很大提升。
1.2.2聚集索引
聚集索引不是一种单独的索引类型,而是一种存储数据方式。当前,SolidDB和InnoDB是唯一支持聚集索引的存储引擎。InnoDB按照主键进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。
对于我们的历史数据表来说,没有任何表的外键去引用历史数据表的id作为约束,所以历史表中的id字段我认为是无意义的,主键的聚集索引应该用在planTime字段上,因此planTime字段应有唯一约束。结合公司的历史数据表,对时间字段的唯一约束做了调查,见下图:
mysql5.6.4以后的版本,支持定义time(3)或者timestamp(6)这样的字段,然后使用current_timestamp(6)即可为该字段赋值带有毫秒或微秒值的时间数据。
上图的时间数据精确到微秒,微秒级别的唯一性足以应付业务上的需要。在测试中,该字段设置为主键,所以不给该字段赋值时,会自动获取毫秒级别的系统当前时间。个人认为采集系统不用赋值也不会出现时间重复问题。
1.3 触发器
1.3.1触发添加
插入实时数据时,通过触发器自动复制改条数据到历史数据表。
测试如下:
1.创建触发器:增加person表记录后自动将记录增加到person1表中
2.添加一条数据到person表中,结果如下:
1.3.2触发删除
删除角色时,通过触发器自动删除用户与角色的关系。
测试如下:
创建触发器:删除person表记
文档评论(0)