一.发展史
1.文件存储(所有的内容都存在文件中)
2.单文件存储(key-value)(存储在多个文件中,会有一张存地址的表key-对应的磁盘路径,查找速度回相对快)
3.层次数据(key-value)
key1parent: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