索引原理
磁盘原理(机械硬盘):
IO读取:不只只是读取硬盘,也可能是网络,U盘,光盘
硬盘结构:扇区,磁道,柱面,磁头,N个磁面,CPU读到我们发送的命令后,就会通过主板发到控制器上,磁盘控制器控制磁头去读取,读完后磁头会回到原来的位置,这是一次IO操作,磁头去找文件的时候速度很慢,比如copy文件的时候,一个文件传输速度快(文件在磁盘上是连续的,磁头只需要摆动一次),多个文件传输速度慢(磁头摆动多次)
光盘和优盘也是一样的,寻址,读取文件,起一次io消耗的资源特别大;
IO读取:不只只是读取硬盘,也可能是网络,U盘,光盘
硬盘结构:扇区,磁道,柱面,磁头,N个磁面,CPU读到我们发送的命令后,就会通过主板发到控制器上,磁盘控制器控制磁头去读取,读完后磁头会回到原来的位置,这是一次IO操作,磁头去找文件的时候速度很慢,比如copy文件的时候,一个文件传输速度快(文件在磁盘上是连续的,磁头只需要摆动一次),多个文件传输速度慢(磁头摆动多次)
光盘和优盘也是一样的,寻址,读取文件,起一次io消耗的资源特别大;
IO:读一次就是一次IO,每一次io都损耗性能
两种存储结构:
1、链表:链表由一系列结点组成,每个结点包括两个部分,一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表添加速度快;缺点1读取的时候必须从头开始读2io读第一个地址起一次io读下一个地址又起一个io;
2、数组:存储位置连续的,读取速度快(泛型,arraylist);
1、链表:链表由一系列结点组成,每个结点包括两个部分,一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表添加速度快;缺点1读取的时候必须从头开始读2io读第一个地址起一次io读下一个地址又起一个io;
2、数组:存储位置连续的,读取速度快(泛型,arraylist);
起一个IO流程:发送指令,找到地址,读取,关闭流;
数据库存数据:数据最终会存到硬盘里,数据库有一个文件系统,把数据分成一个一个页,每页数据能够存储8KB,一页就是一个文件,字段长度必须合理,如果不合理会出现的问题:1如果每个页的长度定为255或max,长度会占过多的页,当读这个页会起更多的IO,查询速度会慢,2随着记录的增加,页数也会增多,查找数据速度会很慢。
索引(解决查询速度慢):为了更加快速的查找数据(提高查询效率)
索引原理:排序的二叉树(对数据进行排序,然后取中间数),B树(排序后的二叉树),B+树(用于解决B树一边特别多,一边特别少的问题,把多个节点放到一起,减少起的io次数)
索引限制:1索引最好用数据不重复的(男女),主键会默认加一个索引(聚集索引,主键不重复唯一的)2不适合用很长的字段(小说,内容越大越容易产生重复,排序麻烦,查询也越麻烦)
缺点:1占用更多的资源(硬盘需要存索引)2索引插入数据的时候根据特殊的算法来进行重写排序,索引会影响你插入更新的速度
不适合建立索引的字段:1重复的较大的字段2经常变化的(每次变化都会引起索引的重新排序,进而影响性能)
目的:减少IO操作,节省性能
索引原理:排序的二叉树(对数据进行排序,然后取中间数),B树(排序后的二叉树),B+树(用于解决B树一边特别多,一边特别少的问题,把多个节点放到一起,减少起的io次数)
索引限制:1索引最好用数据不重复的(男女),主键会默认加一个索引(聚集索引,主键不重复唯一的)2不适合用很长的字段(小说,内容越大越容易产生重复,排序麻烦,查询也越麻烦)
缺点:1占用更多的资源(硬盘需要存索引)2索引插入数据的时候根据特殊的算法来进行重写排序,索引会影响你插入更新的速度
不适合建立索引的字段:1重复的较大的字段2经常变化的(每次变化都会引起索引的重新排序,进而影响性能)
目的:减少IO操作,节省性能
聚集索引:和建立主键的存储结构是一致的,找到索引就找到文件的位置,聚集索引比非聚集索引快,数据行的物理顺序与列值的顺序相同;
非聚集索引:非聚集索引是基于聚集索引