数据库索引-10-Mysql count(*),count(字段),count(1)的区别
总数 count
select count(*)应该是一个比较常用的语句,用来统计记录行数。
但是,慢慢地你会发现,这个语句越来越慢了,为什么呢?
count 的常见问题
关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT。
但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。
不信的话请尝试回答...
2019-01-02 02:17:00 |
SQL
数据库索引-09-MySQL Index Merge 索引合并
索引合并
本文翻译自MySQL 8.0 Reference Manual 8.2.1.3 Index Merge Optimization
Index Merge访问方法(Access method)通过合并多个范围扫描并对结果进行合并,然后获取最终需要返回的行数据。合并多个索引的扫描方法仅仅支持单表访问,不可用于多表关联查询。目前支持的合并方式有并集(unions),交集(inters...
2019-01-02 02:17:00 |
SQL
数据库索引-08-MySQL Index Tips
联合索引
官方概念
MySQL可以创建复合索引(即多列索引)。一个索引最多可以包含16列。
对于某些数据类型,可以为列的前缀建立索引。
MySQL可以为测试索引中的所有列的查询使用多列索引,或者只测试第一列、前两列、前三列的查询,等等。如果在索引定义中以正确的顺序指定列,则单个复合索引可以加速同一表上的几种查询。
多列索引可以看作是排序的数组,其中的行包含通过连接索引列的值创建的值...
2019-01-02 02:17:00 |
SQL
数据库索引-07-联合索引
数据库索引
首先看一些基础知识
mysql-index
b tree
问题
带着问题学习。
什么是联合索引?
如何创建?
使用时候的最佳实践
联合索引数据结构是怎么样的?
为什么有最左原则?
联合索引
联合索引又叫复合索引。
对于复合索引:Mysql从左到右的使用索引中的...
2019-01-02 02:17:00 |
SQL
数据库索引-06-索引运行不好的场景
索引不生效的场景
!= 或者 <>
负向条件查询不能使用索引
实例
select * from order where status!=0 and stauts!=1
not in/not exists都不是好习惯
建议优化为:
select * from order where status in(2,3)
在属性上进行计算不能命中索引
selec...
2019-01-02 02:17:00 |
SQL
数据库索引-05-倒排索引
倒排索引
倒排索引源于实际应用中需要根据属性的值来查找记录。
这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。
由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。
带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。
概述
在关系数据库系统里,索引是检索数据最有效率的方式。...
2019-01-02 02:17:00 |
SQL
数据库索引-04-Apache Phoenix
Phoenix
Phoenix 是针对Apache Hadoop的OLTP和运营分析。
Overview
Apache Phoenix通过结合两个方面的优势,为低延迟应用程序启用Hadoop中的OLTP和操作分析:
具有完整ACID事务功能的标准SQL和JDBC API的功能以及
通过利用HBase作为其后备存储,从NoSQL世界获得最新绑定的读取...
2019-01-02 02:17:00 |
SQL
数据库索引-03-cluster index 聚集索引
通俗点讲
聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因
澄清一个概念:innodb中...
2019-01-02 02:17:00 |
SQL