当前位置: 首页 > news >正文

济南专业网站建设/做网站需要什么条件

济南专业网站建设,做网站需要什么条件,网站优化报价单,开源网站系统安全性2019独角兽企业重金招聘Python工程师标准>>> 在MySQL 5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算。 使用 实际上records接口函数是在优化阶段调用的&#xff0c…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在MySQL 5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算。

使用

实际上records接口函数是在优化阶段调用的,在满足一定条件时,直接去计算行级计数。其explain出来的结果相比老版本也有所不同,这里我们使用sysbench的sbtest表来进行测试,共200万行数据。

mysql> show create table sbtest1\G
*************************** 1. row ***************************Table: sbtest1
Create Table: CREATE TABLE `sbtest1` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`k` int(10) unsigned NOT NULL DEFAULT '0',`c` char(120) NOT NULL DEFAULT '',`pad` char(60) NOT NULL DEFAULT '',PRIMARY KEY (`id`),KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=2000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000
1 row in set (0.00 sec)mysql> explain select count(*) from sbtest1\G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: NULLpartitions: NULLtype: NULL
possible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: NULLfiltered: NULLExtra: Select tables optimized away
1 row in set, 1 warning (0.00 sec)

注意这里Extra里为”Select tables optimized away”,表示在优化器阶段已经被优化掉了。如果给id列带上条件的话,则回退到之前的逻辑。

mysql> explain select count(*) from sbtest1 where id > 0\G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: sbtest1partitions: NULLtype: range
possible_keys: PRIMARYkey: PRIMARYkey_len: 4ref: NULLrows: 960984filtered: 100.00Extra: Using where; Using index
1 row in set, 1 warning (0.00 sec)

实现

在WL#6742中,为InnoDB实现了handler的records函数接口

函数栈

opt_sum_query
|--> get_exact_record_count|--> ha_records|--> ha_innobase::records|-->row_scan_index_for_mysql
  • HA_HAS_RECORDS:引擎flag,表示是否可以把count(*)下推到引擎层
  • 总是使用聚集索引来进行计算行数
  • 只需要读取主键值,无需去读取外部存储列(row_prebuilt_t::read_just_key),如果行记录较大的话,就可以节省客观的诸如内存拷贝之类的操作开销
  • 计算过程可中断,每检索1000条记录,检查事务是否被中断
  • 由于只有一次引擎层的调用,减少了Server层和InnoDB的交互,避免了无谓的内存操作或格式转换
  • 对于分区表,在5.7版本已经下推到innodb层,因此分区表的计算方式(ha_innopart::records)是针对每个分区调用ha_innobase::records,再将结果累加起来

缺点

由于总是强制使用聚集索引,缺点很明显:当二级索引的大小远小于聚集索引,且数据不在内存中时,使用二级索引显然要快些,因此文件IO更少。如下例:

默认情况下检索所有行(以下测试都是在清空buffer pool时进行的,当数据量大于buffer pool 时,执行效率会大大下降):

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|  2000000 |
+----------+
1 row in set (3.92 sec)

即时强制指定索引也没用 MySQL 5.7 InnoDB COUNT(*)优化

mysql> select count(*) from sbtest1 force index(k_1);
+----------+
| count(*) |
+----------+
|  2000000 |
+----------+
1 row in set (3.86 sec)

但如果带上一个简单的条件,让select count(*)走索引k_1,耗费的时间立马下降了….

mysql> select count(*) from sbtest1 where k > 0;
+----------+
| count(*) |
+----------+
|  2000000 |
+----------+
1 row in set (1.05 sec)

个人认为这算是一个性能退化,退一步讲,如果用户知道force index能够走一个更好的索引来计算行数,优化器应该做出选择,而不是总是无条件选择聚集索引,提了个Bug到官方,在MySQL 5.7.18已经还原为原来的版本,原话如下:

由于MySQL 5.7.2对Count(*)中引入了修改,导致在某些情况下,Innodb通过遍历聚集索引而不是较小的辅助索引来计算行数,因此性能有所倒退。在MySQL 5.7.18中修改被还原。

其他

从WL#6742还提到了一个尚未公布的WL#6605,从其只言片语中可以推断官方有意向实现即时获得行数:

The next worklog, WL#6605, is intended to return the COUNT(*) through this handler::records() interface almost immediately in all conditions just by keeping track if the base committed count along with transaction deltas.

让我们继续对新版本保持期待吧 MySQL 5.7 InnoDB COUNT(*)优化

参考:http://mysql.taobao.org/monthly/2016/06/10/

为了方便大家交流,本人开通了微信公众号,和QQ群291519319。喜欢技术的一起来交流吧

转载于:https://my.oschina.net/u/3023401/blog/1476996

http://www.lbrq.cn/news/1457803.html

相关文章:

  • 南京市公共建设中心网站/b站新人视频怎么推广
  • 网站建设的作用有哪些方面/数据分析师资格证书怎么考
  • 怎么做地下彩票网站/长沙网络营销咨询费用
  • 网站的管理与维护/seo培训费用
  • 网站域名备案查询官网/重庆seo网站
  • 杨浦苏州网站建设/信息流广告投放工作内容
  • 做系统吧收藏的网站做没了/sem和seo
  • 网上做二建题那个网站好/市场调研分析报告怎么写
  • 与网站开发相关的书籍/江苏做网站的公司有哪些
  • 怎么对网站做seo优化/上线了建站
  • 网站建设免费代理/it培训机构排名前十
  • wordpress 采集评论/抖音seo是什么
  • 集团公司网站源码/公司seo营销
  • 做网站办公照片/汕头网页搜索排名提升
  • 做兼职哪家网站靠谱/关键词什么意思
  • 网络推广外包流程/如何利用seo赚钱
  • 做网站图标/网络营销渠道建设方案
  • 没有官方网站怎么做seo优化/在线建站模板
  • 网站模板下载器/速推网
  • 电子商务网站建设与维护展望/江西seo推广软件
  • 做网站图片多少钱/杭州seo推广优化公司
  • 河北住房和城乡建设厅网站卡/汕头网站建设方案维护
  • 专业做俄语网站建设/个人网站制作教程
  • wordpress前端注册/搜索引擎优化的英文缩写
  • 学校网站的作用和意义/廊坊seo关键词排名
  • 企业网站整站/汕头网站建设方案开发
  • 微山网站建设多少钱/bt搜索引擎下载
  • 网站怎么防k/百度公司简介
  • 网站域名怎么设置/长春网站开发公司
  • 汕头潮南网站建设/合肥seo整站优化
  • 开源的现代数据探索和可视化平台:Apache Superset 快速指南 Quickstart
  • 在Ansys Mechanical中对磨损进行建模
  • 第N个泰波那契数
  • golang的包和闭包
  • linux 启动流程?
  • Python从入门到精通——第五章 列表与元组