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

做管理信息的网站网站开发工程师证书有用吗

做管理信息的网站,网站开发工程师证书有用吗,wordpress tdk优化,wordpress的作用哪种 count 性能最好#xff1f; count() 是什么#xff1f; count() 是一个聚合函数#xff0c;函数的参数不仅可以是字段名#xff0c;也可以是其他任意表达式#xff0c;该函数的作用是统计符合查询条件的记录中#xff0c;函数指定的参数不为 NULL 的记录由多少条。… 哪种 count 性能最好 count() 是什么 count() 是一个聚合函数函数的参数不仅可以是字段名也可以是其他任意表达式该函数的作用是统计符合查询条件的记录中函数指定的参数不为 NULL 的记录由多少条。 假设 count() 函数的参数是字段名如下 select count(name) from t_order 这条语句统计的是 [ t_order 表中name 字段不为 NULL 的记录] 有多少个。 也就是说如果某一条记录中的 name 字段的值为 NULL 则就不会被统计进去。 再来假设 count() 函数的参数是数字 1 这个表达式如下 select count(1) from t_order; 这条语句是统计 [t_order 表中 1 这个表达式不为 NULL 的记录] 有多少个。 1 这个表达式就是单纯数字它永远都不是 NULL 所以上面这条语句其实是在统计 t_order 表中有多少条记录。 count(主键字段) 执行过程是怎样的 在通过 count 函数统计有多少个记录时MySQL 的 server 层会维护一个名叫 count 的变量。 server 层会循环向 InnoDB 读取一条记录如果 count 函数指定的参数不为 NULL那么就会将变量 count 加 1直到符合查询的全部记录被读完就退出循环最后将 count 变量的值发送给客户端。 InnoDB 是通过 BTree 来保存记录的根据索引的类型又分为聚簇索引和二级索引它们的区别在于聚簇索引的叶子节点存放的是实际数据而二级索引的叶子节点存放的是主键值而不是实际数据。 eg select count(id) from t_order; 如果表里只有主键索引没有二级索引时那么InnoDB 循环遍历聚簇索引将读取到的记录返回给 server 层然后读取记录中的 id 值判断id值是否为 NULL如果不为 NULL 就将 count 变量加 1。 但是如果表里有二级索引时InnoDB 循环遍历的对象就不是聚簇索引而是二级索引。 这是因为相同数量的二级索引记录可以比聚簇索引记录占用更少的存储空间所以二级索引树比聚簇索引树小这样遍历二级索引的I/O成本比遍历聚簇索引的I/O成本小因此 [优化器] 优先选择的是二级索引。 count(1) 执行过程是怎样的 select count(1) from t_order; 如果表里只有主键索引没有二级索引时。 那么,InnoDB 循环遍历聚簇索引主键索引将读取到的记录返回给 server 层但是不会读取记录中任何字段的值因为 count 函数的参数是 1不是字段所以不需要读取记录中的字段值。参数 1 很明显并不是 NULL因此 server 层每从 InnoDB 读取到一条数据就将 count 变量加 1. 可以看到count(1) 相比 count(主键字段)少了一个步骤就是不需要读取记录中的字段值所以通常会说 count(1)的执行效率会比 count(主键字段) 高一点。 但是如果表里有二级索引的时候InnoDB 循环遍历的对象就是二级索引了。  count(*) 执行过程是怎样的 count(*) 其实等于 count(0) 也就是说当使用后 count(*) 时MySQL会将 * 参数转换为 参数 0 来处理。 所以 count(*) 执行过程跟 count(1) 执行过程基本一样性能没有什么差异。 而且 MySQL 会对 count(*) 和 count(1) 优化如果有多个二级索引的时候优化器会使用 key_len 最小的二级索引进行扫描。 只有当没有二级索引的时候才会采用主键索引来进行统计。 count(字段) 执行过程是怎样的 count(字段) 的执行效率相比前面的 count(1) 、count(*)、count(主键字段)执行效率是最差的。 select count(name) from t_order 对于这个查询来说会采用全表扫描的方式来技术。所以它的执行效率是比较差的 小结 count(1)、count(*)、count(主键字段) 在执行的时候如果表里存在二级索引优化器就会选择二级索引进行扫描。 所以如果要执行 count(1)、count(*)、count(主键字段)的时候尽量在数据表上建立二级索引这样优化器会自动采用 key_len 最小的二级索引进行扫描相比于主键索引效率会高一些。 再来就是不要用count(字段) 来统计记录个数因为它的效率是最差的会采用全表扫描的方式来统计。如果非要统计表中该字段不为 NULL 的记录个数建议给该字段建立一个二级索引。 为什么要通过遍历的方式来计数 前面的案例都是基于 InnoDB 存储引擎的但是在 MyISAM 存储引擎里执行 count 函数的方式是不一样的通常在没有任何查询条件下的 count(*) MyISAM 的查询速度要明显快与 InnoDB。 使用 MyISAM 引擎时执行 count 函数 只需要 O(1) 复杂度因为每张 MyISAM 的数据表都有一个 meta 信息有存储了 row_count 值由表级锁保证一致性所以直接读取 row_count 的值就是 count函数的执行结果。 而 InnoDB 存储引擎是支持事务的同一个时刻的多个查询由于多版本并发控制MVCC的原因InnoDB表应该返回多少行是不确定的所以无法像 MyISAM 一样只维护一个 row_count 变量。 举个例子假设表 t_order 有 100 条记录现在有两个会话并行执行以下语句: 在会话A和会话 B 的最后一个时刻同时查表 t_order 的记录总个数可以发现显示的结果不一样。所以在使用 InnoDB 存储引擎时就需要扫描表来统计具体的记录。 如何优化 count(*) 如果对一张大表经常用 count(*) 来做统计其实是很不友好的。 比如下面这个案例中t_order表有 1200 万条记录同时也创建了二级索引但是执行一次  select count(*) from t_order 要花费差不多 5 秒 优化方法 第一种、近似值 如果你的业务对于统计个数不需要很准确比如搜索引擎在搜索关键词的时候给出的搜索结果条数是一个大概值。 这时我们就可以使用 show table status 或者 explain 命令来进行表的估算 执行 explain 命令效率很高因为它并不会真正的去查询下图中的 rows 字段值就是 explain 命令对表 t_order 记录的估算值。 第二种、额外表保存计数值 如果想精确地获取表的记录总数我们可以将这个计数值保存到单独的一张计数表中。 当我们在数据表中插入一条数据的同时将计数表中的计数字段 1 。也就说在新增和删除操作时我们需要额外维护这个计数表。
http://www.w-s-a.com/news/150123/

相关文章:

  • 凯里展示型网站设计抖音代运营收费详细价格
  • 外包网站会自己做原型吗网站制作怎样盈利
  • 为什么在百度搜不到我的网站电商网站开发过程
  • 什么是网站反链网页设计页面链接
  • 佛山企业网站制作韩国seocaso
  • 微信公司网站vue做社区网站
  • 蒙阴网站优化五核网站建设
  • 企业微商城网站建设wordpress新闻是哪个表
  • 重庆网站开发培训机构电商网站创办过程
  • 企业建网站得多少钱长沙财优化公司
  • 网站开发api平台扒完网站代码之后怎么做模板
  • PHP网站建设选择哪家好动画设计师月薪多少
  • 网站如何做市场推广网站开发主要步骤
  • 浏览器正能量网站网页文章导入wordpress
  • 江西中国建设银行网站首页永久免费自助建网站
  • 创建自己网站的步骤吸引人的微信软文
  • 网站建设与网页设计论述题软件开发公司在哪里
  • 二级网站建设方案模板亚马逊网站建设案例
  • 网站开发兼职团队门户网站如何制作
  • 高州市网站建设开发区招聘信息
  • 上海专业网站制作设计公司企业邮箱怎样注册
  • 网站建设在商标第几类网站建设 设计创意
  • 做一网站APP多少钱重庆中色十二冶金建设有限公司网站
  • 网上做效果图网站有哪些软件徐州泉山区建设局网站
  • 凯里网站制作网站篡改搜索引擎js
  • 如何使用凡科建设网站武安城乡建设网站
  • 网站建设网站及上传wordpress火车头发布
  • 有没有做网站的团队电脑版传奇网站
  • 建立企业网站公司医疗创意小产品设计
  • 深圳 做网站 车公庙免费的招标网有哪些