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

房地产网站怎样建设才能快速盈利直通车关键词优化

房地产网站怎样建设才能快速盈利,直通车关键词优化,茶叶网站建设网页设计制作,ecs 1核1g wordpress关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下…

关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT

但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下以下问题:


以上10道题,如果您可以全部准确无误的回答的话,那说明你真的很了解COUNT函数了,如果有哪些知识点是不了解的,那么本文正好可以帮你答疑解惑。


1、认识COUNT

关于COUNT函数,在MySQL官网中有详细介绍:

  1. COUNT(expr) ,返回SELECT语句检索的行中expr的值不为NULL的数量。结果是一个BIGINT值。
  2. 如果查询结果没有命中任何记录,则返回0
  3. 值得注意的是,COUNT(*) 的统计结果中,会包含值为NULL的行数。

即以下表记录

create table #bla(id int,id2 int)
insert #bla values(null,null)
insert #bla values(1,null)
insert #bla values(null,1)
insert #bla values(1,null)
insert #bla values(null,1)
insert #bla values(1,null)
insert #bla values(null,null)

使用语句count(*),count(id),count(id2)查询结果如下:

select count(*),count(id),count(id2)
from #blaresults 7 3 2

除了COUNT(id)COUNT(*)以外,还可使用COUNT(常量)(如COUNT(1))来统计行数,那么这三条SQL语句有什么区别呢?到底哪种效率更高呢?为什么《阿里巴巴Java开发手册》中强制要求不让使用 COUNT(列名)或 COUNT(常量)来替代 COUNT(*)呢?


COUNT(列名)、COUNT(常量)和COUNT(*)之间的区别

前面提到过COUNT(expr)用于做行数统计,那么COUNT(列名)、 COUNT(常量) 和 COUNT(*)这三种语法中,expr分别指的是列名、 常量 和 *。

这三个条件中,常量是一个固定值,肯定不为NULL。*可以理解为查询整行,所以肯定也不为NULL,那么就只有列名的查询结果有可能是NULL。

所以, COUNT(常量) 和 COUNT(*)表示的是直接查询符合条件的数据库表的行数。而COUNT(列名)表示的是查询符合条件的列的值不为NULL的行数。

除了查询得到结果集有区别之外,COUNT(*)相比COUNT(常量) 和 COUNT(列名)来讲,OUNT(*)是SQL92定义的标准统计行数的语法,因为他是标准语法,所以MySQL数据库对他进行过很多优化。

SQL92,是数据库的一个ANSI/ISO标准。它定义了一种语言(SQL)以及数据库的行为(事务、隔离级别等)。


COUNT(*)的优化

前面提到了COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL数据库对他进行过很多优化。那么,具体都做过哪些事情呢?

这里的介绍要区分不同的执行引擎。MySQL中比较常用的执行引擎就是InnoDB和MyISAM。 MyISAM和InnoDB有很多区别,其中有一个关键的区别和我们接下来要介绍的COUNT(*)有关,那就是MyISAM不支持事务,MyISAM中的锁是表级锁;而InnoDB支持事务,并且支持行级锁。

因为MyISAM的锁是表级锁,所以同一张表上面的操作需要串行进行,所以,MyISAM做了一个简单的优化,那就是它可以把表的总行数单独记录下来,如果从一张表中使用COUNT(*)进行查询的时候,可以直接返回这个记录下来的数值就可以了,当然,前提是不能有where条件。

MyISAM之所以可以把表中的总行数记录下来供COUNT(*)查询使用,那是因为MyISAM数据库是表级锁,不会有并发的数据库行数修改,所以查询得到的行数是准确的。

但是,对于InnoDB来说,就不能做这种缓存操作了,因为InnoDB支持事务,其中大部分操作都是行级锁,所以可能表的行数可能会被并发修改,那么缓存记录下来的总行数就不准确了。

但是,InnoDB还是针对COUNT(*)语句做了些优化的。

在InnoDB中,使用COUNT(*)查询行数的时候,不可避免的要进行扫表了,那么,就可以在扫表过程中下功夫来优化效率了。

从MySQL 8.0.13开始,针对InnoDB的SELECT COUNT(*) FROM tbl_name语句,确实在扫表的过程中做了一些优化。前提是查询语句中不包含WHERE或GROUP BY等条件。

我们知道,COUNT(*)的目的只是为了统计总行数,所以,他根本不关心自己查到的具体值,所以,他如果能够在扫表的过程中,选择一个成本较低的索引进行的话,那就可以大大节省时间。

我们知道,InnoDB中索引分为聚簇索引(主键索引)和非聚簇索引(非主键索引),聚簇索引的叶子节点中保存的是整行记录,而非聚簇索引的叶子节点中保存的是该行记录的主键的值。 所以,相比之下,非聚簇索引要比聚簇索引小很多,所以MySQL会优先选择最小的非聚簇索引来扫表。

所以,当我们建表的时候,除了主键索引以外,创建一个非主键索引还是有必要的。

至此,我们介绍完了MySQL数据库对于COUNT(*)的优化,这些优化的前提都是查询语句中不包含WHERE以及GROUP BY条件


COUNT(*)和COUNT(1)

介绍完COUNT(*),接下来看看COUNT(1),对于,这二者到底有没有区别,网上的说法众说纷纭。看下MySQL官方文档是怎么说的:

InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.

画重点:same way , no performance difference。

所以,对于COUNT(1)和COUNT(*),MySQL的优化是完全一样的,根本不存在谁比谁快! 那既然COUNT(*)和COUNT(1)一样,建议用哪个呢? 建议使用COUNT(*)!因为这个是SQL92定义的标准统计行数的语法。


COUNT(字段)

最后,就是一直还没提到的COUNT(字段),他的查询就比较简单粗暴,就是进行全表扫描,然后判断指定字段的值是不是为NULL,不为NULL则累加。相比COUNT(*),COUNT(字段)多了一个步骤就是判断所查询的字段是否为NULL,所以他的性能要比COUNT(*)慢。


总结

本文介绍了COUNT函数的用法,主要用于统计表行数。主要用法有COUNT(*)COUNT(字段)COUNT(1)

因为COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL对他进行了很多优化,MyISAM中会直接把表的总行数单独记录下来供COUNT(*)查询,而InnoDB则会在扫表的时候选择最小的索引来降低成本。当然,这些优化的前提都是没有进行where和group的条件查询。

在InnoDB中COUNT(*)COUNT(1)实现上没有区别,且效率一样,但COUNT(字段)需要进行字段的非NULL判断,所以效率会低一些。

因为COUNT(*)是SQL92定义的标准统计行数的语法,并且效率高,所以请直接使用COUNT(*)查询表的行数!

http://www.ds6.com.cn/news/20333.html

相关文章:

  • 如何在百度里做推广网站郑州seo培训班
  • 宜城网站建设哪家好一站式网站设计
  • 十大免费软件下载大全武汉seo建站
  • 新疆库尔勒建设局网站排名优化公司口碑哪家好
  • 南京seo公司教程北京网站建设东轩seo
  • 网站备案医疗保健审批号是什么如何让网站被百度收录
  • 网页设计作品htmlseo提升关键词排名
  • 优质服务的网站建设网站建设免费网站
  • 唐山做网站口碑好的厦门seo排名公司
  • 网站制作咨免费国外ddos网站
  • 大庆网站设计费用百度浏览器网页
  • 在日本网站做推广百度app安卓版下载
  • 强生网站还要怎样做中央人民政府
  • 海南定安建设局网站网页开发公司
  • 做网站大连搜索引擎排名原理
  • 网站开发介绍人拿多少钱关键词seo
  • 西安做网站的网络公司seo职位描述
  • 网站站点结构图seo关键词优化软件app
  • 有网站做点什么好电话投放小网站
  • 网站开发建设合同海南网站网络推广
  • 专业的企业网站开发公司微信公众号软文怎么写
  • 南明区住房和城乡建设局网站上百度seo找哪里
  • 河北建设工程招标网官方网站外贸网站建设公司哪家好
  • 郑州做网站外包的公司有哪些百度产品推广怎么收费
  • wordpress使用插件seo关键词排名优化官网
  • 怎么做快递网站的分点江苏网站推广公司
  • 做网站如何推销企业策划书
  • 成人用品怎样做网站推广手机百度下载免费
  • 做网站工作室名字cnn头条新闻
  • 谁有专门做外挂的网站百度热搜榜排名