1.索引结构原理:

普通的Btree(binary search tree)就是二叉树,如下图

B+ Tree索引类型则是二叉树的升级版,每个节点存的是 <num ,最后存排序的ROWID

Hash索引

2.数据库结构

3.数据库存储

4.数据块/页(block/page)

指访问磁盘数据库文件最小的单位,一个数据库块中可以存放多条数据(一条指表的一行数据),大小可以指定。多个数据块组成数据文件。因为是访问数据库最小的单位,所以一个数据块中记录的一条数据越小,存放的数据就越多,在读取数据时减少访问不同数据块的次数,从而提高效率。

5.ROWID

ROWID是每条记录在数据库中的唯一标识,通过ROWID可以直接定位记录到对应的文件号及数据块位置。ROWID内容包括文件号、对像号、数据块号、记录槽号.索引最后存储的文件位置便是 ROWID

如下图所示:

6.索引创建的理解

通过索引筛选结果必须足够小的字段添加索引才有意义,如果筛选结果非常多,那么将放弃使用索引改为全表扫描,因为来回通过索引查询结果,不如直接全表扫描来的快。

索引使用大致流程:当创建好索引后,从索引结果集中每次取ROWID,然后去对应地方找数据,然后再去从结果集中取数据进行循环操作。如果结果集非常大,则不如直接全表扫描的快。

创建规则:

创建在 筛选结果集非常小的字段中(小于全表的10%),否则使用全表扫描

创建在 where子句中,并且频率较高。

创建在 查询大于修改删除的字段中

不要在大数据量的字段中创建索引

7.mysql没有像orical的软解析,硬解析,但是mysql的硬解析和orical的软解析一样快。

相关网址:http://blog.jobbole.com/100349/

https://blog.csdn.net/yzllz001/article/details/54848513

mysql数据库的理解的更多相关文章

  1. 初步理解 MySQL数据库

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1. 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MYSQL必须从第1条记录 ...

  2. 代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)

    在发展的前几天遇到的问题,在调试过程中发现配置service本次交易不工作层,更新后数据库抛出异常或成功,交易不会回滚.随后开始了各种检查,视图spring的事务是否配置正确,进入更新方法时是否开启了 ...

  3. MySql数据库理解

    在之前的面试过程中,有被问到很多次,关于MySQL数据库相关知识,其中有问到了解存储引擎,数据库优化等问题,问得一脸懵X,确实以前在学习的时候没有去深入了解过这一块儿,今天找到了相应的数据库视频,稍稍 ...

  4. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  5. MySQL 数据库主从复制架构

    前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复 ...

  6. shell脚本连接、读写、操作mysql数据库实例

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...

  7. Mysql数据库的一些命令_LInux

    查看当前数据库的版本,因为有些命令在不同版本中 用法有可能不一样,注意 -V 是大写字母V[root@localhost ~]# mysqladmin -Vmysqladmin  Ver 8.42 D ...

  8. vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)

    [编译中遇见的问题]       ①在用vc 6.0去调用MySQL中的数据时,出现中文乱码       ②不明白mysql中的码制 [开始解决问题]      ①打开mysql控制台         ...

  9. 如何正确建立MYSQL数据库索引

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

随机推荐

  1. Android KitKat Immersive Mode使用

    写了一个方法,在onCreate和onResume中调用即可,4.4以上可用. private void openImmersiveMode() { if (android.os.Build.VERS ...

  2. 首次使用AndroidStudio创建hello world遇到的坑!(Mac系统下)

    第一次用AS,且不说它SDK配置的琐碎,光建立第一个简单的HelloWorld项目的配置包问题就把我卡了一天.这个坑必须记录一下,

  3. 从码云上下载react项目并配置成可运行状态

    (第一次写,如有不足之处,欢迎指出) 一.下载项目: 1.首先保证安装了git, 2.然后在本地想要存放项目位置打开git(Git Bash Here),再复制码云中如图所示的地址: 3.在git中输 ...

  4. maven安装本地jar包到本地仓库命令

    mvn install:install-file -Dfile=C:\Users\windows\.m2\repository\com\jayway\jsonpath\json-path\2.2.0\ ...

  5. Python学习笔记-chapter1

    我自幼时自觉聪慧,但实缺恒力,遂二十余岁却一事无成,亦无一技傍身,实属惭愧. 少时便仰慕于新兴世界之IT技术,然因惰性,未曾一日习学. 今陷此困境,聊以度日,反无端生出些许时间,便志要潜心研学,不求能 ...

  6. Android Studio删除依赖

    遇到报错 就是要删 ①在build.gradle中删除对应依赖代码(注释了,但是没用??) ②检查工程中的依赖 点击"file">>“project structure ...

  7. Mybatis---架构图

  8. linux下禁用网卡的启用网卡的一些方法

    第一种方法: 这种方法主要是在不重启的情况下会一直生效,适用于服务器. #禁用网卡eth0 sudo ifconfig eth0 down #启用网卡eth0 sudo ifconfig eth0 u ...

  9. admin-4

    每个学员机上有三台预先配置好的虚拟机server —— 作为练习用服务器desktop —— 作为练习用客户机classroom —— 提供网关/DNS/软件素材等资源 通过真机上“虚拟系统管理器”访 ...

  10. c# 纯代码调用 webservice

    public static class RequestHelper { public class RequestResult { public RequestResult(bool requestRe ...