首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL】回查询与覆盖索引

1.如果定义了PK(Primary Key,主键),那么PK就是聚集索引。 2.如果没有定义PK,则第一个NOT NULL UNIQUE的列就是聚集索引。...假设有这么个: id是主键,name是普通索引。 则: 聚集索引是这样的存储方式: 普通索引自立门户,是这么个存储方式: 那么局势就崭露头角了哈,脑子活的已经晓得了。...普通索引是无法直接定位行记录的,所以如果使用普通索引查询的时候,如果所需要的列都已经在索引里面了,那就直接给你了,这叫覆盖索引。 如果没有完成覆盖,那就要根据主键再扫描一遍上面那棵索引树了。...称之为回查询。 不是所有索引都有资格当覆盖索引的,因为覆盖索引必须要存储索引的列值,而哈希索引、空间索引和全文索引等都不存储索引列值,索引MySQL只能使用B-Tree索引做覆盖索引。...另外,当发起一个被索引覆盖的查询(索引覆盖查询)时,在explain(执行计划)的Extra列可以看到【Using Index】的信息。

1.5K10

MYSQL、索引覆盖、 索引下推

索引覆盖 执行下面sql查询 select id,age from user where age = 10; 可通过普通索引列(age) 就能获取SQL所需的所有列数据,无需回,速度更快。...explain 分析: 可通过Extra 是否是Using Index 判断查询是否索引覆盖 如何实现索引覆盖: 将被查询的字段,建立到联合索引里去 哪些场景适合使用索引覆盖来优化SQL 全count...查询优化 列查询回优化 分页查询 4....name like '张%' and age = 20; Mysql版本 < 5.6 检索复合索引 idx_name_age 查询出所有 name 包含 “张” 的主键ID 然后通过聚簇索引判断出所有符合...where子句的数据返回 ,此过程需要回 Mysql版本 >= 5.6 检索复合索引 idx_name_age 查询所有 name 包含 “张” 的 且age =20 的数据 直接返回结果集, 无需回

1.8K30

sqoopmysql导入hive parquettimestamp,decimal转换问题

注意两个地方: 1.时间转换问题:timestamp、date,time 以上时间类型会被sqoop转成int,long型,无法直接转成时间类型 如果要转的有两个办法: 1)转成long型,再用from_unixtime...转回来,才能看时间(太麻烦)—–parquet的类型对应为bigint select *, from_unixtime(cast(SOURCE_LOAD_DATE as BIGINT) DIV 1000000...) as SOURCE_LOAD_DATE from table_name; 2)直接转成string型(直观,可以直接看)——parquet的数据类型对应为string 另外: 处理datetime...中有null的情况 在sql connnect中加入:zeroDateTimeBehavior=convertToNull 如: --connect jdbc:mysql://192.168.1.100...parquet中对应的数据类型为decimal(precision,scale),如decimal(19,3) 参考:https://archive.cloudera.com/cdh6/6.2.0/docs/sqoop

2.5K30

MySQL 的回覆盖索引、索引下推

在研究mysql二级索引的时候,发现Mysql这个操作,往下研究了一下 字面意思,找到索引,回到中找数据 解释一下就是: 先通过索引扫描出数据所在的行,再通过行主键ID 取出数据。...另外上面所说的不需要回,其实还有另一个名词 覆盖索引 覆盖索引 就是我们需要查询的数据都在二级索引树中,直接返回这种情况就叫做覆盖索引。..., 然后由存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器 ; 索引条件下推优化可以减少存储引擎查询基础的次数,也可以减少MySQL...5.6优化查询回的功能,在5.6之前都不支持索引下推,笔者的8.0,则需要先关闭索引下推: set optimizer_switch='index_condition_pushdown=off';...总结: 索引下推功能是mysql 5.6推出优化回的操作,只支持向上兼容,低版本是不支持的; 索引下推优化的只是回次数,扫描行数还是一样的。

1.3K20

Sqoop抽数到Hive异常分析

Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.问题描述 使用Sqoop抽取MySQL数据到Hive时,...抽取语句正常执行但数据没有写入Hive的中,执行的Sqoop抽数脚本如下: export HADOOP_USER_NAME=hive sqoop import \ --connect "jdbc:mysql...2.异常处理及分析 1.在Sqoop抽数的脚本中存在target-dir参数,指向的HDFS数据目录,为hive_hosts的仓库目录,将target-dir参数去掉执行 ? 脚本执行成功 ?...因为在上述异常中我们指定的target-dir目录与Hive的仓库目录一致,所以会导致Sqoop抽数成功,但对应的Hive中无数据问题。 ?...3.总结 1.使用Sqoop抽数到Hive,如果使用target-dir指定HDFS数据抽取目录时不能设置目标目录与hive的仓库目录一致,否则会导致抽取的数据被Sqoop删除。

1K10

制作mysql大数据并验证覆盖索引的查询效率

昨天跟同事聊起数据性能的问题,能不能仅用覆盖索引实现数据的汇总统计。...找了一个开发环境已有的数据进行测试,通过explain命令,能看到mysql通过覆盖索引就能实现sum的需求,而无须去读取实际行数据。...1 数据设计 目的是演示如何生成千万级数据,只设计了一个最简单常用的数据:user。...如下代码生成100行 [SQL] call createRandomUser(100); 受影响的行: 100 时间: 1.004s 我电脑上这个的数据行数 mysql> select count(*...4.5 终极版-覆盖索引 前面的分析可以看到,为了计算平均值,mysql还需要读取行数据。如果age字段也在这个索引中,查询性能会进一步提升吗?因为不再读行数据。

2.7K20

MySQL 啥时候锁,啥时候行锁?

MySQL Innodb 的锁可以说是执行引擎的并发基础了,有了锁才能保证数据的一致性。众所周知,我们都知道 Innodb 有全局锁、级锁、行级锁三种,但你知道什么时候会用锁,什么时候会用行锁吗?...下面就让我带着大家来温习下 MySQL 的锁吧! 对于数据库而言,其锁范围可以分为: 全局锁 级锁 行级锁 全局锁 全局锁就是对整个数据库实例加锁。...所以当我们需要判断这个的记录有没有被加锁时,直接判断意向锁就可以了,减少了遍历的时间,提高了效率,是典型的空间换时间的做法。 那么什么时候会用到意向锁呢?...而全局锁、级锁,则是 MySQL 层面就支持的锁。 那么什么时候会使用行级锁呢? 当增删改查匹配到索引时,Innodb 会使用行级锁。 如果没有匹配不到索引,那么就会直接使用级锁。...总结 文章最后,我们回顾一下开头提出的问题:Innodb 啥时候锁,啥时候行锁? 级锁包括:锁、元数据锁、意向锁。 对于锁而言,当存储引擎不支持行级锁时,使用锁。

1.4K20
领券