学习原因 我写了好多都小项目 感觉再数据库上面一点过要设计好 不然写到一半就发现问题 要改这改那 有时候 会整表作废 所以我要去学一下 再数据库设计上面要做好 做到防bug于未然
-
糟糕的数据库设计:数据冗余 ,数据的删除插入都麻烦【自动频闭物理外键的使用】
-
良好的数据库设计:节省内存空间 ,保证数据库的完整性 方便我们开发系统
-
实际开发中
-
需求分析:根据需求进行分析
-
概要设计 :设计数据库
-
索引设计
红黑树 和二叉树 红黑数 一个父节点下面分两个小节点 左边的小于父节点 右边的大于父节点 一层一层向下展开
缺点:无论是红黑树 还是 二叉树 如果查询的数据一直往下展开 会导致 io占用内存变大 一个io占用4k内存
mysql 采用的是b+数
索引 :在数据库中的主键也是索引 本质就是 一个一个的指针互相去指
索引会使用分页(一页是16kb) ,在上面有个页目录 ,页目录中储存每页的第一个索引数和指针(指向该页),如果页目录超过限定的范围就会进行再次分页,将分页所得的信息又放到上一个目录中去 ,一个写索引数 ,一个写指针 可以说b+数是从下往上搭建 最底层的就是数据 ,上面的就是页信息
聚集索引:会将整行的数据存储到索引的叶子节点中(聚集索引一个表中只会有一个 默认为主键 )
- 普通索引:只会存储索引列 会将数据储存到一个行号
- 覆盖索引:查询列和索引列相同就会走
- 如果查询的数一个是索引数 另一个不是索引数 结果有可能差索引 也有可能走普通查询,因为mysql中有索引优化器,会自动判断那个查询的速度快,那个快就会走哪个
我们查询的时候要尽快多的去查询我们我们创建的索引
查询索引然后去表中查找的我们叫他回表
mysql查询优化
- 我们要使用确定的列名 而不使用" * "号 (用* 号不会去走索引表,而去查全表)
- 尽量少使用嵌套子查询 会消耗大量的cpu资源(如:查询一个信息 然后用这个信息去查询)
- 在查询表时 不要采用逻辑运算 逻辑运算在代码中去解决
- 合理的使用索引
- 使用explain可以查询这张表是否用到了索引
- 尽量使用全局匹配 少用like 模糊查询