文章分类 - sql
摘要:一 、distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段用法注意: 1.distinct【查询字段】,必须放在要查询字段的开头,即放在第一
阅读全文
摘要:前言 SELECT COUNT(*)会不会导致全表扫描引起慢查询呢? SELECT COUNT(*) FROM SomeTable 网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,其实反而性能最高,这种说法对不对
阅读全文
摘要:数据库及索引准备 创建表结构 为了逐项验证索引的使用情况,我们先准备一张表t_user: CREATE TABLE `t_user` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`id_no` varchar(18) CHA
阅读全文
摘要:1 count(*)为什么性能差? 在Mysql中,count(*)的作用是统计表中记录的总行数。 而count(*)的性能跟存储引擎有直接关系,并非所有的存储引擎,count(*)的性能都很差。 在Mysql中使用最多的存储引擎是:innodb和myisam。 在myisam中会把总行数保存到磁盘
阅读全文
摘要:作为后端开发,我们经常需要设计数据库表。整理了 21 个设计 MySQL 表的经验准则,分享给大家,大家看完一定会有帮助的。 1.命名规范 数据库表名、字段名、索引名等都需要命名规范,可读性高(一般要求用英文),让别人一看命名,就知道这个字段表示什么意思。 比如一个表的账号字段,反例如下: acc_
阅读全文
摘要:在MySQL的实现中,Nested-Loop Join有3种实现的算法: Simple Nested-Loop Join:简单嵌套循环连接 Block Nested-Loop Join:缓存块嵌套循环连接 Index Nested-Loop Join:索引嵌套循环连接 MySQL 8.0.18版本推
阅读全文
摘要:GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name op
阅读全文
摘要:一、 问题提出 《阿里巴巴JAVA开发手册》里面写超过三张表禁止join,这是为什么? 二、问题分析 对这个结论,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验证这个结论。(实验没有从代码角度分析,目前达不到。可以把mysql当一个黑盒,使用角度来验证这个结论) 验证结论
阅读全文
摘要:这是一条标准的查询语句: 这是我们实际上SQL执行顺序: 我们先执行from,join来确定表之间的连接关系,得到初步的数据 where对数据进行普通的初步的筛选 group by 分组 各组分别执行having中的普通筛选或者聚合函数筛选。 然后把再根据我们要的数据进行select,可以是普通字段
阅读全文
摘要:近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。 mapper configuration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码) <insert id="batchInser
阅读全文
摘要:前言 MySQL从5.7版本开始,引入了JSON类型字段,这使我们可以在MySQL数据库中存储JSON格式的数据,并保留其对象格式,再也不用转成字符串类型保存了,减少了许多字符串类型和对象类型之间的转换步骤。而同时也会衍生出,查询时如何筛选出与JSON字段内容相匹配的数据问题,那么接下来,我们就看看
阅读全文
摘要:Mysql中Regexp常见用法 模糊匹配,包含特定字符串# 查找content字段中包含“车友俱乐部”的记录 select * from club_content where content regexp '车友俱乐部' # 此时的regexp与like的以下用法是等同的 select * fro
阅读全文
摘要:锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。在 MySQL 中,不同存储引擎使用不同的加锁方式;我们以 InnoDB 存储引擎为例介绍 MySQL 中的锁机制,其他存储引擎中的锁相对简单一些。 一、锁的分类 1、表级锁与行级锁 MySQL 中的锁可以按照粒度分为锁定整个
阅读全文
摘要:一 、mysql的主从复制 1 主服务器上面的任何操作都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。 2 从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地
阅读全文
摘要:结论: double类型,长度需大于等于小数点位数,若相等则整数部分必须为0 假设长度为3,小数点位数为2,则整数位数为3-2=1。 整数位数超出限制会导致插入失败 小数位数超出限制将对超出位从后往前依次进行五舍六入 验证结论: 表结构: //两位小数,一位整数 CREATE TABLE test
阅读全文
摘要:IF 表达式 IF( expr1 , expr2 , expr3 ) expr1 的值为 TRUE,则返回值为 expr2 expr1 的值为FALSE,则返回值为 expr3 如下: SELECT IF(TRUE,1+1,1+2); -> 2 SELECT IF(FALSE,1+1,1+2); -
阅读全文
摘要:一、前言 1、buffer pool是什么 咱们在使用mysql的时候,比如很简单的select * from table;这条语句,具体查询数据其实是在存储引擎中实现的,大家都知道mysql数据其实是放在磁盘里面的,如果每次查询都直接从磁盘里面查询,这样势必会很影响性能,所以一定是先把数据从磁盘中
阅读全文
摘要:在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引。 官方的隐试转换说明: 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换两个参数都是字符串,会按照字符串
阅读全文
摘要:我们在制定表DDL设计规范时,通常都会要求一条:如果有两个表要做JOIN,那么关联条件列类型最好完全一样,才能保证查询效率,真的如此吗? 相信不少朋友主动或被动告知这样一个规范要求(其实我也制定过这个规范),当多表JOIN时,关联条件列类型最好是完全一样的,这样才可以确保查询效率。果真如此吗? 关于
阅读全文
摘要:MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的干预下,总是先执行AND语句,再执行OR语句。 其实 and和or运算,就相当于逻辑运算中的 &(与) 和 |(或)运算。 参考文章: https://blog.csdn.net/u011064736/article/detail
阅读全文