捕获.PNG
    了解底层架构是什么样子的:
    select name from user where id=1;

    • sql接口:sql的入口 当前线程监听到sql发过来之后 mysql其实根本不知道这个是啥子意思 他会把sql交给sql的入口sql接口
    • sql解析器:相当于知道这个sql到底想干啥子 这条sql想从user表中去拿name这个字段但是这个问题在于怎么去做?

    sql优化器选择一个最优解:
    两种做法:

    • 先提取出来所有user表的数据 然后再去过滤掉id等于一这个记录然再去拿name这个字段的值
    • 先提取出来所有user表的数据去拿那么所有字段的值,然后再去找这么多字段里面id=1这个字段
    • 通过这个sql优化器就选取一个最优的获取的数据方式去拿到这个数据
    • 你要知道这个数据库其实就是去操作磁盘中的数据,或者内存数据那么现在就有问题,你已经知道做什么事情,怎么做这个事情但是呢你现在的角度是sql角度想问题,比如说这个数据到底在哪儿那么就可以使用存储引擎


      mysql插拔式的编程技术

    sql解析器只是知道做啥子但是到底怎么做就得要交给sql优化器
    sql执行器就会拿着前两个兄弟的分析结果就去执行
    sql执行器最终都会把数据直接注入到磁盘或者内存里面去
    他只是执行但是它不知道当前这个数据所在磁盘或者内存里面
    那么这些问题都会去交个主键(存储引擎):知道这个数据在哪里
    最常用的是Inodb帮助执行器更好的执行sql(11种多的存储引擎)
    为什么会有这么多存储引擎是因为客户的需求不一样
    比如说你现在要进行事务操作,那么你就需要一个事务引擎
    总体来说插拔式就对引擎进行插拔捕获.PNG
    捕获.PNG
    图片上的sql语句就进行了一个回表操作为什么这样说呢,分析它辅助列索引和主键索引是一个树结构吗,那么
    它根据这个sql语句去找到了xc但是这里里面没有age这个字段那么它就又要回表去到主键列索引(回表查询会降低性能)

    回表查询是mysql优化手段之一所以我们要尽量的去避免回表
    主键列查询效率快,性能最高

    综上所诉:
    mysql的底层innodb引擎,我们的索引是B+TREE
    然后B+TREE索引 同时你站在存储的角度上来看
    它又聚餐索引
    每张表里面都默认有一个主键
    如果你指定主键,他会以表中第一个非空字段设置主键
    msyql会给你生成隐藏主键性能一定是最高的无论什么情况