如果缓存的统计信息不可用或已过期,MySQL 将从存储引擎中检索最新的统计信息,并将其统计信息更新并缓存在 mysql.index_stats 和 mysql.table_stats 字典表中。...值得注意的是:MySQL 重新启动或第一次打开 mysql.index_stats 和 mysql.table_stats 表不会自动更新缓存的统计信息。...在以下情况中,查询统计信息列不会在 mysql.index_stats 和 mysql.table_stats 字典表中存储或更新统计信息: 缓存的统计信息尚未过期时。...8.0 对于表字段的统计信息提供更多的技术特性来支持。...统计有效性时长,字段本身的直方图,使用起来越来越便利。
直接了当上SQL SELECT a.字段1, a.字段2, b.字段1, COUNT(DISTINCT a.字段1),COUNT(DISTINCT b.字段1) //...这行为去重 FROM xs_highway_transport_log a LEFT JOIN b表 b ON b.id = a.main GROUP BY a.字段...1 ,b.字段1 // 这行为分组 直接这样 即可实现 多字段去重情况。...同时可以配合having过滤分组,也可以在 分组前 GROUP BY 前添加WHERE 条件 [GROUP BY 字段][HAVING ] 上效果图 注:要放在COUNT
问题描述 测试表如下: 上面的日期是精确到日的,我现在要按照年月来将上表的数据分组统计,并求出number的平均值。...例:查出wellid='001’每月的number平均值 sql语句 关键词:日期字段得用模糊查询 SELECT avg( number ), date_format( time, '%Y-%m'
目录 前言 oracle脚本: 建表语句 插入默认值语句 删除某个字段 增加某个字段 有数据情况下修改某个字段为另外的名称 mysql: 建表语句 插入默认值 删除某个字段 增加某个字段 表有数据情况下将某个字段修改为另外的名称...,我们需要对一些sql语句实现可重复执行的操作。...比如甲方A的进展已经到3.0阶段了,表需要加A字段,修改B字段为字符串;甲方B进展到2.0字段,只需要表加A字段,这时候如果你的表不是可重复执行的,你越到后面你就维护不清楚到底这张表哪些字段甲方A有,哪些甲方...B有,但是当你的脚本是可重复执行的时候,你只需要将2.0的脚本都执行一遍,然后如果是3.0版本的就将3.0的所有脚本都执行一遍就都可以解决了 下面将介绍oracle和mysql的可重复执行脚本 oracle...比如不需要phone这个字段 -- 删除phone字段 drop procedure if exists sq_db_mysql; delimiter $$ create procedure sq_db_mysql
背景 pg单字段排序,排序字段中可能会出现重复,这样就会导致我们在进行分页查询时会出现一些和预期不相符的现象,如这个数据在第一页出现了,然后再第二页又出现。...name age 2222 aa 12 6666 aa 12 7777 aa 12 可以明显看到,两次分页查询出现了同一条id为2222的记录,但实际上数据库里只有一条2222,查询结果莫名出现了重复数据...具体解决方式就是,补充一个有唯一约束或者大概率唯一的字段作为次级排序条件。...from test_select_order_page_duplicate tsopd order by tsopd.age, tsopd.id desc 预防 n对1关系的连表查询时,如果根据1端表的字段排序就肯定要加一个
distinct关键字可以过滤多余的重复记录只保留一条。...distinct支持单列去重和多列去重,如果是单列去重,简明易懂,即相同值只保留1个,如下所示,select distinct code from tt;多列去重则是根据指定的去重列信息进行,即只有所有指定的列信息都相同...错误 [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL...MySQL不同版本sql_mode默认值可能是不同的,因此在数据库升级配合的应用迁移过程中,尤其要注意像only_full_group_by这种校验规则的改变,很可能是个坑。...group by code;当然,这种在会话级通过改动sql_mode实现的路径,还需要考虑场景,因为缺少only_full_group_by的校验,按照code聚类了,但cdate和ctotal的值很可能是不唯一的
do /* 对满足i<=10000的值进行while循环 */ insert into t1(a,b) values(i,i); /* 写入表t1中a、b两个字段...insert_t1(); /* 运行存储过程insert_t1 */ update t1 set c = '2019-05-22 00:00:00'; /* 更新表t1的c字段...2019-05-22 00:00:00' */ update t1 set c = '2019-05-21 00:00:00' where id=10000; /* 将id为10000的行的c字段改为与其它行都不一样的数据...隐式转换 2.1 不走索引的原SQL: select user_name,tele_phone from user_info where tele_phone =11111111111; /* SQL...模糊查询 3.1 不走索引的原SQL: select * from t1 where a like '%1111%'; 3.2 优化后走索引的SQL(结果不一定准确): select * from t1
我们以前有讲解过如何统计快速重复数值:EXCEL小技巧,筛选重复值!,但如果老板要你统计不重复的数据怎么办?所以今天我们讲解如何快速统计不重复的数据。...本次用到的是大家都熟悉的数据透视表,我们都知道,数据透视表他是有很多的功能的,那今天就用到了他的统计功能,是一个非常简单一个功能,但是他却很实用。...设置数据透视表字段 ①把【姓名】字段拖入【行】→②把【月绩总分】拖入【值】。 ? 设置值字段 在放透视表区域点击【鼠标右键】→选择【值字段设置】 ?...在弹出的窗口选择【值汇总方式】→接着选择【非重复计数】→点击【确定】。 ? 这样就完成了,结果展示: ?
或者知道某一种实战情境,换到其它实战情境就忘了……嗯,本质上还是重复的不够,熟练度不行啊。 ? 既然是我已知的知识点,立即实操吧。...情境A:字段取值范围在同一表格 想要统计的原数据,和该字段的所有取值范围,在同一张数据表时,代码简单如下。...想要统计的原数据,和该字段的所有取值范围,不在同一张数据表时,代码仅稍微复杂一点点。...之前的硬编码风格,在 grafana 上通过 add query 完成,该操作是新增数据列,使得数据结果是一行多列,每个成就名就是一列。 ? ?...——这并非我的不足,这是我将要提升的机会,对不? 小结 在这篇笔记中,我不仅记录了自己如何完成按某个字段的取值范围进行统计的需求,既有早期的硬编码风格,也有升级版的语句。
00 简单回顾 之前写过一篇关于mysql 对表大小写敏感的问题(你有遇到过MySQL因大小写敏感导致的问题吗),其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。...02 解决方案 因为默认情况下字段内容是不区分大小写的,也即大小写不敏感。所以解决方案就是要新增字段内容的校验规则。 使用mysql 的BINARY 关键字使搜索区分大小写。...这两种查看表的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin。 03 总结 字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。...2)utf8_general_ci:utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。...通过上一篇和这一篇的内容,详细大家对mysql对大小写敏感的问题也有一定的认识了,在实际的开发中,库和表名最好使用小写字母,注意字段存储内容的大写问题。
数据库并发的场景有三种: 读-读 :不存在任何问题,也不需要并发控制 读-写 :有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读 写-写 :有线程安全问题,可能会存在更新丢失问题...多版本并发控制( MVCC )是一种用来解决读-写冲突的无锁并发控制 1.每个事务都要有自己的事务ID,可以根据事务ID的大小,来决定事务到来的先后顺序 2.mysqld可能会面临处理多个事务的情况,事务也有之间的生命周期...理解 MVCC 需要知道三个前提知识: 3个记录隐藏字段、undo 日志、Read View 3个记录隐藏列字段 建表时虽然指明了表中有多少列,但是mysql都会默认添加3个隐藏列字段。...也就是我们可以理解成update和delete可以形成版本链,insert暂时不考虑 而select不会对数据做任何修改,所以,为select维护多版本,没有意义。...不包含,说明,事务4不在当前的活跃事务中。 事务4的更改,应该看到。所以事务2能读到的最新数据记录是事务4所提交的版本,而事务4提交的版本也是全局角度上最新的版本
专栏持续更新中:MySQL详解 一、MVCC概念 MVCC是多版本并发控制(Multi-Version Concurrency Control),是MySQL中基于乐观锁理论实现隔离级别的方式,用于实现已提交读和可重复读隔离级别...,也经常称为多版本数据库。...,update,select…lock in share mode/for update这些操作,都是读的是最新的数据 MVCC:每一行记录实际上有多个版本,每个版本的记录除了数据本身之外,增加了其它字段...核心逻辑就是判断版本链中的哪个版本是当前事务可见可处理的 "数据快照"中并不是数据,存储的是一些事务id Read View 有四个重要的字段: creator_trx_id :指的是创建该 Read...这种通过「版本链」来控制并发事务访问同一个记录时的行为就叫 MVCC(多版本并发控制) 在已提交读隔离级别下,每次查询都会重新生成数据快照,若其他事务已经提交了,当前事务再次查询时重新生成的数据快照中的
说到视图你肯定想起来了,我们在前面讲事务隔离的时候,其实有一个方法能够拿到一致性视图的,就是开启可重复读隔离级别开启事务。 官方自带的逻辑备份工具是mysqldump。...业务的更新不只是增删改数据(DML),还有可能是加字段等修改表结构的操作(DDL)。不论哪种方法,一个库被全局锁上以后,你要对里面任何表做加字段,都是会被锁住的。...但是,即使没有被全局锁住,加字段也不是一帆风顺的,因为你还会碰到下面要结束的表级锁。 3.表级锁 MySQL里面表级别的锁有两种,一种是表锁,一种是元数据锁(meta data lock MDL)。...因此,在MySQL5.5版本引入了MDL,当对一个表做增删改查操作的时候,加MDL读锁;当要对表做结构变更操作的时候,加MDL写锁。 读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。...之后开发人员或者DBA再通过重试命令重复这个过程。 4.小结 今天,我们讲了MySQL的全局锁和表锁 全局锁主要用在逻辑备份过程中。
引言 今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢? ?...或者说MySQL有没有这个能力处理呢? 当然是有的。MySQL贴心地给出了 GROUP_CONCAT 函数,用于使用分隔符连接多行字段的值。...', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 当然了,peoples_hobbies 表完全有可能在 hobbies 字段有重复的值...比如对我们的输出字段进行排序后再使用分隔符连接。
索引的建立是表中比较有指向性的字段,相当于目录,比如说行政区域代码,同一个地域的行政区域代码都是相同的,那么给这一列加上索引,避免让它重复扫描,从而达到优化的目的!...3、索引类型 在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。...对于多列惟一性索引,保证多个值的组合不重复。 PRIMARY KEY索引和UNIQUE索引非常类似。 事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。...) 7、查询中统计或分组统计的字段 8、表记录太少(如果一个表只有5条记录,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块) 9、经常插入、...11、经常和主字段一块查询但主字段索引值比较多的表字段 12、对千万级MySQL数据库建立索引的事项及提高性能的手段
是的,就是在可重复读隔离级别下开启一个事务。 官方自带的逻辑备份工具是 mysqldump。...因此,修改 global 变量的方式影响面更大,我不建议你使用; 2. 在异常处理机制上有差异。...读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查; 2. 读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。...比如下面这个例子,我经常看到有人掉到这个坑里:给一个小表加个字段,导致整个库挂了。 你肯定知道,给一个表加字段,或者修改字段,或者加索引,需要扫描全表的数据。...之后开发人员或者 DBA 再通过重试命令重复这个过程。 MariaDB 已经合并了 AliSQL 的这个功能,所以这两个开源分支目前都支持 DDL NOWAIT/WAIT n 这个语法。
3.索引类型 在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。...对于多列惟一性索引,保证多个值的组合不重复。 PRIMARY KEY索引和UNIQUE索引非常类似。 事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。...基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。 ...) 查询中统计或分组统计的字段 select max(hbs_bh) from zl_yhjbqk select qc_bh,count(*) from zl_yhjbqk group by qc_bh...数据重复且分布平均的表字段 假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。
count(字段) 统计指定列记录数,记录为NULL的不统计 sum(字段) 计算指定列的数值和,如果不是数值类型,那么计算结果为0 max(字段) 计算指定列的最大值 min(字段) 计算指定列的最小值...SELECT 字段 FROM 表名 WHERE 条件 LIMIT offset, length; offset是指偏移量,可以认为是跳过的记录数量,不写则默认为0。...所以主键有没有含义没有关系,只要不重复,非空就行。...=起始值; 唯一约束 表中字段的值不能重复 字段名 字段类型 UNIQUE 非空约束 表中字段的值不能为NULL 字段名 字段类型 NOT NULL 默认值约束 不指定这个字段的数据,就使用默认值 字段名...分类和商品 一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键 多对多 例如:老师和学生,学生和课程 多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键
实际中非常不建议使用全列查询,因为这需要显示表的所有数据,而部分的数据可能此时并不在内存中,则mysqld服务还需要磁盘IO来加载表的剩余数据,降低MySQL查询的性能,同时全列查询还无法使用索引来优化查询过程...如果select后面有多列,则会进行多列字段的去重处理,也就是当多列字段同时重复时,才会去重。如果只有一列,那就只针对该列进行去重。 4....count函数除外,count括号内的字段可以是数字,列字段名,通配符等等,因为count只负责统计表中记录(表中的一行数据成为记录)的个数,所以count比较特殊,其他的四个聚合函数括号内的字段只能是值为数字的列字段名...,然后对于每组的行数据进行部分列字段的显示,此时就只显示两列字段,一个是name,一个是聚合统计结果min(math) 6.group by子句的使用(配合having进行分组聚合统计之后的条件筛选...合并查询就是将多个select的查询结果合并到一起,union在合并时,会自动去掉重复的行(两个所有列字段完全重复的行),union all不会去掉重复的行。
领取专属 10元无门槛券
手把手带您无忧上云