数据库摘要(本文以mysql为例)

xiaoxiao2021-02-28  68

一.发展史

1.文件存储(所有的内容都存在文件中)

2.单文件存储(key-value)(存储在多个文件中,会有一张存地址的表key-对应的磁盘路径,查找速度回相对快)

3.层次数据(key-value)

key1

parent:k2

child:K3

key2……key3……

4.网状数据库

在层次数据库的基础中(上图)行数据如果超过16K,数据库就会自动创建溢出桶,溢出桶超过16K,溢出桶也会创建溢出桶,形成网状数据库。

故:设计数据库时尽量计算一下所有列加在一起的长度尽量不要超过16K

     此问题也不用考虑,DBA可以通过工具进行碎片整理,将溢出的桶整理,将同一个行数据尽量保持在同一个主桶中

二.性能(索引)

1.B+索引一般用于唯一索引(主键等)

   目前会要求数据库内存大点是为了存储索引内容(目前索引会将索引对应的字段存入到索引体系中)

   故:索引字段尽量不要太长(会增加存储索引的内容,从而占用数据库内存)

   索引尽量用整型,其次浮点型、再其次是varchar型

2.varchar型索引优化

   例如:A表的varchar字段:UUID 

            需要添加一个字段CRC(32)【此字段存储UUID字段转换成CRC(32)int类型的字段】

          查询语句的写法

            select 字段 from 表 

                   where CRC(32) =? 【因为数据量相当大是,CRC(32) 会有重复(即使UUID是不重复的),故UUID字段查询条件还是要加入,但是因为先过滤了CRC(32),UUID过滤之后,重复的数据量就会很少,检索速度也会很高】

                     and UUID = ?

3.组合索引

例如:索引A 组合了A、B、C三个字段

数据库后台操作时,实际会添加三个索引

index(A)

index(A、B)

index(A、B、C)

故:如果创建了A、B、C的组合索引,再搜索A或者A、B或者ABC的时候索引会起作用,搜索BC索引不起作用

     索引会遵循左坠索引原则(具体可以查看一下,不同的数据库原则会不太一样,mysql遵循此原则)

三.发展趋势

  SQL语言:是非存储性语言

                 只是一个报表语语言、表示层语言

    SQL语言本身就会降低数据的处理速度

    nosql,就是不通过sql语音,直接操作数据库,速度回相对比较高

    Habse:表示层语言 phinx

    hadoop:表示层语言Hive

转载请注明原文地址: https://www.6miu.com/read-2624957.html

最新回复(0)