首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高性能MySQL学习笔记

Schema与数据类型优化 选择优化的数据类型 更小的通常更好 简单就好 尽量避免null MySQL schema设计中的陷阱 太多的列 太多的关联 全能的枚举 变相的枚举 非此发明的null 范式和反范式...该索引对如下类型的查询有效: 全值匹配(和索引中所有列进行匹配) 匹配最左前缀(只使用索引的第一列) 匹配范围值 匹配列前缀(匹配某一列的值的开头部分) 精确匹配某一列并范围匹配另外一列 只访问索引的查询...在mysql中只有Memory引擎显示支持哈希索引 哈希索引的限制 只包含哈希值和行指针,而不包含字段值 不是按照索引值的顺序存储的,无法用于排序 不支持部分索引列匹配查找 只支持等值比较查询 访问哈希索引的数据非常快...二级索可能比想象的更大,因为二级索引的叶子节点包含了引用行的主键列。...where条件来过滤不匹配的记录 使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Mysql| Mysql函数,聚集函数的介绍与使用(Lower,Date,Mod,AVG,...)

    函数使用注意事项: 1.关于函数的关键字使用,MySQL是不区分大小写的. 2.低版本的MYSQL可能不支持高版本中部分聚集函数,具体的聚集函数的使用应根据MySQL的版本选择支持的聚集函数使用....0点0分0秒时,上面的SQL语句就匹配不到结果.比如修改一下第一条记录为一下上午10点时,上面的SQL语句就不能匹配到结果了. +-----------+---------------------+--...: 1.所有的聚集函数在对指定的列进行计算时,会忽略列值为NULL的行. 2.特别的COUNT函数在对所有的列进行计算时允许使用*, 对行进行计数时,不会忽略一行数据中每个列为null值的行....(对行进行计数时,不会忽略一行数据中每个列为null值的行)  ②使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。...与MAX()一样, MIN()要求指定列名.对非数值数据使用MIN() MIN()函数与MAX()函数类似,MySQL允许将它用来返回任意列中的最小值,包括返回文本列中的最小值。

    1.5K10

    select count(*) 底层到底干了啥?

    (4)计数一行: Evaluate_join_record 与列是否为空,介绍计数过程如何影响 COUNT( * ) 结果。...这里会涉及行锁的获取、MVCC 及行可见性的问题。当然对 于 SELECT COUNT( * ) 这类快照读而言,只会涉及 MVCC 及其可见性,而不涉及行锁。...简单来说,COUNT(arg) 本身为 MySQL 的函数操作,对于一行来说,若括号内的参数 arg ( 某列或整行 ) 的值若不是 NULL,则 count++,否则对该行不予计数。...Q:对于“SELECT COUNT( * ) FROM t”或者“SELECT MIN(id) FROM t”操作,第一次的读行操作读到的是表 t 中 ( B+ 树最左叶节点 page 内 ) 的最小记录吗...A:两种情况会将所读的行计入 count: (1)如果 COUNT 函数中的参数是某列,则会判断所读行中该列定义是否 Nullable 以及该列的值是否为 NULL;若两者均为是,则不会计入 count

    1.3K20

    MYSQL 索引优化

    不必要的索引会浪费存储空间,同时也会增加数据更新成本(数据更新时,索引也相应的需要被更新)。 MySQL 使用索引 索引用于快速定位特定值的表数据行。...如果不使用索引,MySQL则需要从第一个数据行开始查找整个数据表,直到找到要查找的数据行,表越大,查找成本越高。如果查找条件的列存在索引,那么MySQL就可以快速定位需要查找的数据位置。...MySQL可以使用多列索引进行查询,基于索引多列匹配,或者只匹配索引包含的第一列,前两列… 前n列。合理的排序,组合索引列,使之满足大多数的查询需求。...例如,对于生成列定义f1 + 1 和查询条件1 + f1是不一样的;假如f1 + 1 结果类型为整型,生成列类型为string,那么这两者也是不匹配的。...对于BETWEEN 和IN()以外的操作符,每个操作符都可以用一个匹配的生成列代替。对于BETWEEN 和 IN()操作符,只有第一个参数可以被生成列替代,同时另外一个参数必须具有相同的结果类型。

    99630

    网易MySQL微专业学习笔记(十一)-MySQL业务优化与设计

    前言 这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL业务优化与设计”中的MySQL数据类型相关笔记。...分页查询 避免limit +offset过大 offset 1w,会扫描1w零一行数据 --随着offset增大,io消耗越大 应该使用自增主键ID模拟分页 第一页,直接查 得到第一页的max(id)=...实时统计改进2-缓存实时统计 对需要精确统计的计数利用前端缓存实施维护计数 实时统计改进3-最大自增ID获取总数 很多逻辑可以利用自增ID最大值直接做总数 可扩展性设计 可扩展性 硬件资源增长有极限的情况下处理尽可能久的线上业务...分区表与水平分区 hash分区 适合将来需要做水平拆分的表 清理节点上不要的数据非常高效 如,当一台机器满足不了用户表或用户订单数据量的时候,将用户放到不同节点。...自动更新戳 统计需求经常要求从线上读走增量数据 表的第一个timestamp类型字段在写入时如果不填值,会自动写入系统时间戳 表的第一个timestamp类型字段每次记录发生更新后都会自动更新 在update_time

    1K10

    【Mysql进阶-2】图文并茂说尽Mysql索引

    漫话Mysql索引 1 索引原理探究 在关系数据库中,索引是一种单独的、物理的数对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单...一个表的物理顺序只有一种情况,因此对应的聚集索引只能有一个。如果某索引不是聚集索引,则表中的行物理顺序与索引顺序不匹配,与非聚集索引相比,聚集索引有着更快的检索速度。...4、查询列不连续时,无法使用联合索引(会用到a列索引,但c排序依赖于b,所以会先通过a列的索引筛选出a=1的记录,再在这些记录中遍历筛选c=3的值,是一种不完全使用索引的情况) SELECT * FROM...基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL 使用该索引的机会就越大。 Sub_part 表示列中被编入索引的字符的数量。...create_time 7、索引列数据类型不匹配 例如,如果age字段有索引且类型为字符串(一般不会这么定义,此处只是举例)但条件值为非字符串,索引失效,例如SELECT * FROM student

    1.1K20

    MySQL不走索引的情况分析

    查询结果集是原表中的大部分数据 当数据库查询命中索引时,数据库会首先利用索引列的值定位到对应的数据节点。这个数据节点上记录了对应数据行的行标识符(Row Identifier)。...然而,如果查询需要获取该行其他列的数据,就需要进行回表操作。 在回表操作中,数据库会使用行标识符再次访问数据节点或磁盘上的实际数据行,以获取完整的数据。这个过程被称为回表。...回表操作可能会增加额外的磁盘访问和数据检索的开销,因此,在某些情况下,当MySQL判断回表所需的资源大于直接扫描全表时,它可能选择不走索引,而是执行全表扫描。...in条件导致不走索引的情况: in条件过多 explain select * from products where type in (1,2,3,4,5,6,7); 如果 IN 条件中包含太多的值,超出了数据库管理系统的限制...建议 基于此问题的解决方案是:手动更新相关统计数据。

    39310

    Java 后台开发面试题分享八

    count(列名) 只包括列名那一列,在统计结果的时候,会忽略列值为空的计数,即某个字段值为 NULL 时,不统计。这里的空不是指空字符串或者 0,而是表示 null。...下面这几种类型查询使用前面说的索引是很有用的: 1、匹配全值,一个全键值匹配索引中所有列的指定值,也就是根据索引列的值来匹配。 2、匹配最左前缀,只根据索引最左列值查找。...3、匹配某一列的前缀,即根据索引列的值的前缀查找,这种情况只能使用到索引第一列的情景。 4、匹配值区间,即根据索引某一列值范围查找,也只能是索引列第一列。...5、匹配一部分精确值,一部分范围值,比如我索引有两列 A、B,可以根据 A 列的精确值,B 列的范围值进行查询。 6、仅索引查询。...B-Tree 索引支持仅索引查询,这种情况只会访问本身,而不会访问行存储。 因为树的节点是有序排列的,因此可以用来根据(查找值)查找和 order by 查询(有序方式查找值)。

    88720

    一文读懂 select count(*) 底层原理

    (4)计数一行: Evaluate_join_record 与列是否为空,介绍计数过程如何影响 COUNT( * ) 结果。...这里会涉及行锁的获取、MVCC 及行可见性的问题。当然对 于 SELECT COUNT( * ) 这类快照读而言,只会涉及 MVCC 及其可见性,而不涉及行锁。...简单来说,COUNT(arg) 本身为 MySQL 的函数操作,对于一行来说,若括号内的参数 arg ( 某列或整行 ) 的值若不是 NULL,则 count++,否则对该行不予计数。...Q:对于“SELECT COUNT( * ) FROM t”或者“SELECT MIN(id) FROM t”操作,第一次的读行操作读到的是表 t 中 ( B+ 树最左叶节点 page 内 ) 的最小记录吗...A:两种情况会将所读的行计入 count: (1)如果 COUNT 函数中的参数是某列,则会判断所读行中该列定义是否 Nullable 以及该列的值是否为 NULL;若两者均为是,则不会计入 count

    3.4K20

    数据仓库开发 SQL 使用技巧总结

    复合索引 其实还是一个 b+ 树,每个节点是几个字段值 concat 起来的元组,比如复合索引 (a, b) 的 b+ 树上,对 (a) 列是有序的,对 (a, b)组合列也是有序的,但是对 (b) 列却不一定是有序的...左半连接与左外连接的区别是,左半连接将返回左表中符合 join 条件的记录,而左外连接将返回左表所有的记录,匹配不上 join 条件的记录将返回 null 值。...const, system, null 性能从差到好all 全表遍历index 索引树遍历range 检索给定范围的行,使用索引选择行ref 表示表的连接匹配条件,即哪些列或者常量被用于查找索引列上的值...key_len 表示索引中使用的字节数,可以计算查询使用的索引的长度,越短越好ref 表示连接匹配条件,那些列或者常量被用于查找索引列上的值rows 表示 mysql 根据表统计信息以及索引选用情况,估算查询需要读取的行数...,截止到本行数据,统计数据是多少(最大值、最小值等) 同时可以看出每一行数据,对整体统计数据的影响 场景 计算几天内平均数目,累计值,... demo 计算三天内平均金额 with test_tb (t

    3.2K30

    select count(*) 底层到底干了啥?

    (4)计数一行: Evaluate_join_record 与列是否为空,介绍计数过程如何影响 COUNT( * ) 结果。...这里会涉及行锁的获取、MVCC 及行可见性的问题。当然对 于 SELECT COUNT( * ) 这类快照读而言,只会涉及 MVCC 及其可见性,而不涉及行锁。...简单来说,COUNT(arg) 本身为 MySQL 的函数操作,对于一行来说,若括号内的参数 arg ( 某列或整行 ) 的值若不是 NULL,则 count++,否则对该行不予计数。...Q:对于“SELECT COUNT( * ) FROM t”或者“SELECT MIN(id) FROM t”操作,第一次的读行操作读到的是表 t 中 ( B+ 树最左叶节点 page 内 ) 的最小记录吗...A:两种情况会将所读的行计入 count: (1)如果 COUNT 函数中的参数是某列,则会判断所读行中该列定义是否 Nullable 以及该列的值是否为 NULL;若两者均为是,则不会计入 count

    1.3K00

    select count(*) 底层究竟做了什么?

    计数一行: Evaluate_join_record与列是否为空,介绍计数过程如何影响 COUNT( * )结果。...这里会涉及行锁的获取、MVCC 及行可见性的问题。当然对 于 SELECT COUNT( * ) 这类快照读而言,只会涉及 MVCC 及其可见性,而不涉及行锁。...简单来说,COUNT(arg) 本身为 MySQL 的函数操作,对于一行来说,若括号内的参数 arg ( 某列或整行 )的值若不是 NULL,则 count++,否则对该行不予计数。...Q:对于SELECT COUNT( * ) FROM t或者SELECT MIN(id) FROM t操作,第一次的读行操作读到的是表 t 中 ( B+ 树最左叶节点 page 内 ) 的最小记录吗?...A:两种情况会将所读的行计入 count: 1、如果 COUNT 函数中的参数是某列,则会判断所读行中该列定义是否 Nullable以及该列的值是否为 NULL;若两者均为是,则不会计入 count,否则将计入

    1.3K30

    select count(*)底层究竟做了什么?

    计数一行: Evaluate_join_record与列是否为空,介绍计数过程如何影响 COUNT( * )结果。...这里会涉及行锁的获取、MVCC 及行可见性的问题。当然对 于 SELECT COUNT( * ) 这类快照读而言,只会涉及 MVCC 及其可见性,而不涉及行锁。...简单来说,COUNT(arg) 本身为 MySQL 的函数操作,对于一行来说,若括号内的参数 arg ( 某列或整行 )的值若不是 NULL,则 count++,否则对该行不予计数。...Q:对于SELECT COUNT( * ) FROM t或者SELECT MIN(id) FROM t操作,第一次的读行操作读到的是表 t 中 ( B+ 树最左叶节点 page 内 ) 的最小记录吗?...A:两种情况会将所读的行计入 count: 1、如果 COUNT 函数中的参数是某列,则会判断所读行中该列定义是否 Nullable以及该列的值是否为 NULL;若两者均为是,则不会计入 count,否则将计入

    1.2K40

    2024重生之回溯数据结构与算法系列学习(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】

    溯数据结构与算法系列学习之栈和队列精题汇总 (1)题目:设计一个递归算法,删除不带头结点的单链表L 中所有值为 x 的结点。...s->data = val; // 将输入的值赋给新节点 s->next = L->next; // 新节点的下一个指针指向当前链表的第一个节点 L->...,与当前右括号进行匹配 >如果不对应,则不匹配 >最后,如果栈为空,则表示括号匹配 >不空表示有多余括号,则不匹配 实现代码: #include using namespace...return; // 结束函数 } // 栈中有多余的括号,则不匹配 cout 不匹配" 不匹配提示 } int main...= j; // 将列索引存入三元组 t[len].value = arr[i][j]; // 将非零值存入三元组 len++; // 增加三元组的计数

    5910

    五分钟入门文本处理三剑客grep awk sed

    含义 -v 显示不匹配行信息(反向搜索) -i 搜索时忽略大小写 -n 显示行号(文件中的行号) -r 递归搜索(搜索文件夹) -E 支持扩展正则表达式 -F 不按正则表达式匹配,按照字符串字面意思匹配...选项 含义 -c 只输出匹配行的数量,不显示具体内容 -w 匹配整词 -x 匹配整行 -l 只列出匹配的文件名,不显示具体匹配行内容 cat show.txt love lovelove i love...使用egrep可以支持扩展正则表达式,与grep -E等价 awk 使用一般有如下两种形式 第一种形式 awk 'BEGIN{}pattern{commands}END{}' file_name 语法格式...python flink 输出每一行有多少列 awk '{print NF}' show.txt 3 3 可以用这个输出每一行的最后一列的值 awk '{print $NF}' show.txt...-"}{print $0}' show.txt python|java|php flink|hadoop|storm 输出每一行的第二列 # RS指定行分隔符 # FS指定列分隔符 awk 'BEGIN

    63930

    java面试题

    写操作比较频繁的列慎重加索引 索引越多占用磁盘空间越大 不要为输出的列加索引 考虑维度优势:维度越高(维度的最大值就是数据行的总数),数据列包含的独一无二的值就越多,索引的使用效果就越好...UNCACHEABLE SUBQUERY 一个子查询的结果不能被缓存,必须重新评估外链接的第一行。...ALL: Full Table Scan,MySQL将遍历全表以找到匹配的行。 index: Full Index Scan,index与ALL区别为index类型只遍历索引树。...range: 只检索给定范围的行,使用一个索引来选择行。 ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。...ref ref表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。 rows rows表示MySQL根据表统计信息,以及索引选用的情况,找到所需记录需要读取的行数。

    11710

    MySQL不走索引的情况分析

    查询结果集是原表中的大部分数据 当数据库查询命中索引时,数据库会首先利用索引列的值定位到对应的数据节点。这个数据节点上记录了对应数据行的行标识符(Row Identifier)。...然而,如果查询需要获取该行其他列的数据,就需要进行回表操作。 在回表操作中,数据库会使用行标识符再次访问数据节点或磁盘上的实际数据行,以获取完整的数据。这个过程被称为回表。...回表操作可能会增加额外的磁盘访问和数据检索的开销,因此,在某些情况下,当MySQL判断回表所需的资源大于直接扫描全表时,它可能选择不走索引,而是执行全表扫描。...关于隐式转换更多详细内容可以参考: 浅析 MySQL 的隐式转换 in/not in 条件导致不走索引 in、not in、不走索引的原因是相似的,以下基于in语句分析。...通配符"_"出现在开头 建议 尽量避免在模式的开头使用前导通配符 % 如果无法避免第一种,根据实际业务和查询语句考虑使用后缀索引 将通配符 % 放在模式的末尾,以便进行前缀匹配。

    29060

    InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema

    如果LOCK_TYPE为RECORD,则该列值显示的值为锁定记录的主键值,否则为NULL。如果没有主键,则LOCK_DATA是具有唯一性的InnoDB内部行ID号值。...只读和非锁定事务不记录 TRX_WEIGHT:事务的权重,该数值反映了事务修改的记录行数和事务锁定的记录行数改变的行数(但不一定是确切的计数)。...可以使用该列与INNODB_LOCKS表的LOCK_ID列进行关联以查询INNODB_LOCKS表中更多的锁信息 TRX_WAIT_STARTED:如果TRX_STATE列值为LOCK WAIT,则该列值显示事务开始等待锁的时间...,否则该列值为NULL TRX_MYSQL_THREAD_ID:MySQL线程ID。...该表中的每一行记录代表innodb源代码中的一个instruments点,对应源代码中的一个计数器。每个计数器都可以单独启动、停止和重置值。

    1.4K30

    SQL优化完整详解

    MySQL索引 1. mysql如何使用索引 索引用于快速找出在某个列中有一特定值的行。对相关列使用索引是提高SELECT 操作性能的最佳途径。...Distinct: 一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 Not exists : MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了...如果MySQL在t2中发现一个匹配的行,它知道t2.id绝不会为NULL,并且不再扫描t2内有相同的id值的行。...换句话说,对于t1的每个行,MySQL只需要在t2中查找一次,无论t2内实际有多少匹配的行。...它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 Using index 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的, 这发生在对表的全部的请求列都是同一个索引的部分的时候

    1.2K40
    领券