分类: MySQL

21 篇文章

InnoDB自适应哈希索引
InnoDB存储引擎监测到同样的二级索引不断被使用,那么它会根据这个二级索引,在内存上根据二级索引树(B+树)上的二级索引值,在内存上构建一个哈希索引,来加速搜索。 不过哈希索引是消耗资源的,它需要维护自自身的数据,并不是说自适应哈希在任何情况下都会提升二级索引的查询性能 使用SHOW ENGINE INNODB STATUS\G可以看到两个比较重…
哈希索引
思考这么一个问题:我们都认同哈希的查询是O(1),比B+树的O(log(n))要高效,那为什么现在的数据库几乎不用到哈希索引? 即使是在创表时加上hash字段,实际也不是哈希索引。 mysql> create index nameidx on student(name) using hash; Query OK, 0 rows affecte…
聚集索引和非聚集索引
MyISAM存储引擎data放的数据的地址。就是非聚集索引结构。不涉及回表操作。 索引和数据都在主键索引树上放着就是聚集索引。 MyISAM的辅助索引和主索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。 InnoDB的辅助索引叶子节点上存放的是索引关键字和对应的主键,涉及回表操作。
InnoDB 的主键和二级索引树
InnoDB 是数据和索引存储在一块的 辅助索引树/二级索引树 key是辅助索引的值,data是所在记录行的主键值。要搜索的如果在辅助树上没有,将回表。 假如现在要执行这句话 select * from student where age=20 ORDER BY name;。可以采用多列索引,需要注意的是索引顺序要和筛选顺序对得上。 mysql&g…
B+树索引
B-树 由AVL引入B树。内存上都是O(logn),主要是优化了磁盘IO。 拿2000W的数据来说事儿。AVL在最坏的情况下需要log(2000W)/log(2) = 25,25次磁盘I/O是一个很糟糕的速度;磁盘的读取是按块来的,把B树节点设置成块大小将对磁盘I/O非常友好,假设一个节点存500个,只需要log(2000W)/log(500) =…
MySQL 索引
这篇漫画还8错 物理上(聚集索引&非聚集索引)/逻辑上 优点:提高查询效率 缺点:CPU负荷太重。磁盘I/O 普通索引/二级索引:数量不限。一张表的一次查询只能用一个索引 唯一性索引:UNIQUE,主键索引隶属于唯一性索引 主键索引:Primary Key自动创建索引(InnoDB如果用户没有设置索引,会自动添加。因为它数据和索引两个一起)…
MySQL 的存储引擎
主要是两个:MyISAM 和 InnoDB。 MyISAM的表在磁盘上存储成 3 个文件,其文件名都和表名相同,扩展名分别是:.frm(存储表定义) .MYD(MYData,存储数据) .MYI (MYIndex,存储索引) InnoDB的表在磁盘上有两个文件,其文件名都和表名相同,扩展名分别是:.frm(存储表的定义) .ibd(存储数据和索引)…
连接查询
其中,left join 和 right join统称为 “外连接查询”,inner join 是“内连接查询” inner join 用法 先按照这个文件里的语句创建好数据。 一共有三个表: student。uid(P)/name/age/sex course。cid(P)/cname/credit(绩点) exame。uid(P)/cid(P)…
分页查询
limit的使用 作用是 偏移+限制长度 mysql> select * from user; +----+-------------+-----+-----+ | id | name | age | sex | +----+-------------+-----+-----+ | 4 | zhang san | 20 | M | | 5 |…
order by 和 group by
order by asc 升序;desc 降序 order by 也可以优化,和索引有关。将“文件排序”转换成“using index” mysql> explain select * from user order by age; +----+-------------+-------+------------+------+-------…