精华内容
下载资源
问答
  • 索引顺序文件

    千次阅读 2020-07-25 10:17:30
    基本上克服了变长记录的顺序文件不能随机访问,以及不便于记录的增加或删除。...在对索引顺序文件进行检索,首先利用用户提供的关键字以及某种查找算法去检索索引表,找到该记录所在记录组中的第一个记录的表项,从

    基本上克服了变长记录的顺序文件不能随机访问,以及不便于记录的增加或删除。
    记录仍然以关键字的顺序组织起来。
    引入了文件索引表,通过该表可以实现对索引顺序文件的随机访问。
    增加了溢出文件,用它来记录新增加、删除和修改的记录。

    一级索引顺序文件

    首先将变长记录顺序文件中的所有记录分为若干组,50个记录为一组。然后为顺序文件建立一张索引表,并为每组中的第一个记录在索引表中建立一个索引项。

    在对索引顺序文件进行检索时,首先利用用户提供的关键字以及某种查找算法去检索索引表,找到该记录所在记录组中的第一个记录的表项,从中得到该记录组第一个记录在主文件中的位置。再利用顺序查找法去查找主文件,从中找到所要求的记录。
    如果一个顺序文件所含记录为N,则为检索到具有指定关键字的记录,平均查找N/2个记录,但对于索引顺序文件,平均查找平方根N个记录。
    例如:一个顺序文件有10000个记录,平均须查找的记录数为5000个,但对于索引顺序文件,则平均查找100个记录

    两级索引顺序文件

    对于一个非常大的文件,为找到一个记录而需要查找的记录数目仍然很多,对于一个10的六次方个记录的索引顺序文件,需要查找1000个记录。
    为了进一步提高检索效率,可以为顺序文件建立多级索引。

    对于一个含有10的六次方个记录的顺序文件,可以先为该文件建立一张低级索引表,每100个记录为一组,所以低级索引表有10000个表项,在每个表项中存放顺序文件中每个组第一个记录的记录键值和指向该记录的指针,然后为低级索引表建立一张高级索引表。

    直接文件和哈希文件

    1. 直接文件
      直接文件,可根据给定的关键字直接获得指定记录的物理地址。
      键值转换:根据给定的关键字直接获得指定记录的物理地址
    2. 哈希文件
    3. 是最广泛的一种直接文件,利用哈希函数可将关键字转换为相应记录的地址。
    展开全文
  • 唯一索引包括联合唯一索引,多列形成的唯一索引,这些列可以唯一确定条表记录,可以为空 ) INDEX(普通索引):允许出现相同的索引内容;(加快查询速度) PROMARY KEY(主键索引):不允许出现相同的值;(主键...

    索引是查询优化最主要的方式;

    查询方式:

      一种是:全表扫描;

      一种是:利用数据表上建立的所以进行扫描。

    1.索引类型分类

    • UNIQUE(唯一索引):不可以出现相同的值,可以有NULL值;(

         加快查询速度,并且可以限制列值的唯一性,允许为空

              唯一索引包括联合唯一索引,多列形成的唯一索引,这些列可以唯一确定一条表记录,可以为空

    • INDEX(普通索引):允许出现相同的索引内容;(加快查询速度)
    • PROMARY KEY(主键索引):不允许出现相同的值;(主键唯一性,加快查询速度,不能为空)
    • fulltext index(全文索引):可以针对值中的某个单词,但效率确实不敢恭维;(主要针对文本的内容进行分词,加快查询速度)
    • 组合索引:实质上是将多个字段建到一个索引里,列值的组合必须唯一;(多列组成的索引,查询效率提升高于多个单列索引合并的效率)

    2.索引结构分类

    索引有很多分类,例如B-tree索引,哈希索引,全文索引等等,索引的实现是在存储引擎层,并不是在后端服务器层,所以不同的存储引擎支持的索引结构也不一定一样

    •  B-tree索引

         B-tree 索引普遍存在于存储引擎中,他使用B-tree数据结构来存储数据,如果对树形数据结构比较了解的话,就知道B-tree索引所带来的好处了,他的每个叶子节点都会包含下一个节点的指针,非常方便查询数据

         B-tree 适用于全键值,键值范围,或者前缀查找

    • 哈希索引

         哈希索引基于哈希表实现,对于每一行数据,存储引擎会对所有的索引列计算一个哈希码,然后存储引擎会基于这个哈希码来查找数据,小编感觉有点像HashMap 中槽的查询过程

    •   全文索引

         全文索引在几种索引结构类型中比较特殊,他查找的是文本中关键词

    3. 用 alter table 语句创建索引

    应用于表创建完毕之后再添加;

    • alter table 可用于创建普通索引、UNIQUE索引和PRIMARY KEY索引3种索引格式,
    • table_name是要增加索引的表名,
    • column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。
    • 索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。
    • 另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。
     ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名);
    
    -- 普通索引
    alter table table_name add index index_name (column_list) ;
    -- 唯一索引
    alter table table_name add unique (column_list) ;
    -- 主键索引
    alter table table_name add primary key (column_list) ;

    4.用 create index 语句创建索引

    • CREATE INDEX可用于对表增加普通索引或UNIQUE索引,可用于建表时创建索引
    • 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;
    • 如果是BLOB和TEXT类型,必须指定 length
    CREATE INDEX index_name ON table_name(username(length)); 
    
    --  create只能添加这两种索引;
    CREATE INDEX index_name ON table_name (column_list)
    CREATE UNIQUE INDEX index_name ON table_name (column_list)
    
    -- 为表my_text中的列name创建普通索引名称index_n
    create index index_n on my_test(name);
    -- 为age做降序索引
    create index index_age on my_test(age DESC);
    -- #建立表列age和name的联合索引;按照age升序后再按照name降序排序
    create index index_age_name on my_test(age,name DESC);

    4.删除索引

    删除索引可以使用ALTER TABLEDROP INDEX语句来实现;

    drop index index_name on table_name ;
    
    alter table table_name drop index index_name ;
    
    alter table table_name drop primary key ;

    5.修改索引

    修改索引可以使用先删除再添加来实现;

    --修改索引
    alter table my_test drop index index_name;--删除索引
    
    alter table my_test add index index_name(column_name);

     

    6. 索引的正确使用

        索引是建立在系统文件上的,会占用一定的内存空间,另外数据在更新的时候也会去维护索引,消耗内存,所以索引一定要正确的使用,索引并不是越多越好,要根据具体的查询业务来规划索引的建立。

    建议不要使用索引的几种情况:

        1. 区分度不是很大的字段,例如 性别 sex

        2. 频繁更新的字段

        3. 字符串类型的字段 或者 文本类型的字段

        4. 不在where列中出现的索引

    索引失效的几种情况:

        1. 查询列中有函数计算 

        2. 查询列中有模糊查询,"%cloum",可以使用"cloum%" 代替,如果要使用"%column%",那么select 列中是索引列

        3. 如果查询条件中有or, 索引会失效,除非所有条件都加上索引

        4. 使用不等于(!= 或者 <>)

        5. is null 或者 is not null

        6. 字符串不加引号,会导致索引失效

        7. 最左原则,联合索引中会遵循最左原则,即如果要使用联合索引,那么前面的索引列一定要包含,举个例子,

           有个联合索引(a,b,c) 那么查询条件中只能是 a=1 或者 a=1 and b=1 或者 a=1 and b=1 and c=1,不然索引就会失效

    7. 慢查询日志

        慢查询日志是指 mysql中查询 时间超过固定阈值的查询记录,默认时间是10秒,mysql默认情况下不开启慢查询

        默认:show variables like "%slow_query_log%"

     手动开启 set global 变量名 = 值

     set global slow_query_log = on ; 手动开启慢查询日志
    
     set global long_query_time = 10; 手动设定查询时间超过的值,超过就会记录查询日志
    
     set global slow_query_log_file = "/var/slow_log.log"; 手动设定慢查询日志的记录地址
    
     set global log_queries_not_using_indexs = on ; 手动设定 是否要记录 查询中使用到索引的记录

     

    展开全文
  • 我发现DBF文件数据的一个大秘密,因为要用到TBatchMove操作DBF文件,需要使用索引,如果这个DBF文件没有包含索引,可以使用下面的 SQL建立索引: create index 索引名 on "表名.dbf"(字段名); 但是如果这个DBF文件已经...

    我发现DBF文件数据的一个大秘密,因为要用到TBatchMove操作DBF文件,需要使用索引,如果这个DBF文件没有包含索引,可以使用下面的

     

    SQL建立索引:

     

    create index 索引名 on "表名.dbf"(字段名);

     

    但是如果这个DBF文件已经包含索引,可是这个CDX索引文件坏了或是丢失了,用上面的SQL会提示'Index does not exist.File or

     

    directory does not exist.这时候重新创建索引就失败,但是我们可以把这个DBF文件修改为不包含索引文件的类型:修改这个文件的第28个

     

    字节为0就可以了,

     

    procedure TForm1.Button7Click(Sender: TObject);
    const
      NoIndex:Byte=0;
    var
      fByte:file of byte;
    begin
      AssignFile(fByte,'csfzk.dbf');
      FileMode:=2;
      Reset(fByte);
      Seek(fByte,28);
      Write(fByte,NoIndex);
      CloseFile(fByte);

    end;

     

    这样,先把索引文件标识删除了,并把索引文件CDX删除了,再用上面的SQL创建这个CDX文件就好了,不然会提示:'Index already exists';

     

    删除一个DBF文件的索引用下面的SQL:

     

    drop index "表名.dbf".zch

     

    在Delphi中执行和Foxpro中一样的命令:pack all,用下面代码:

     

    需用引用Uses DBiTypes,DBiProcs,DBiErrs三个单元

      tbUpdate.Close;

      tbUpdate.TableName:='csfzk.dbf';
      tbUpdate.Exclusive:=true;
      tbUpdate.Open;
      DbiPackTable(tbUpdate.DBHandle,tbUpdate.Handle,nil,szFOXPRO,True);
      tbUpdate.Close;

     

    如果这个DBF文件包含索引,会把所有记录连同这个索引文件CDX一同删除,这时可以用上面的方法,先创建这个DBF文件的索引文件CDX,然后

     

    把这个DBF文件修改为不包含索引的文件类型,这时需用索引的操作可以进行,而删除记录时也不会把索引给删除了,岂不一举两得!

     

    展开全文
  • 索引文件的操作

    千次阅读 2012-06-01 19:06:38
    索引文件构成 1.索引文件  索引文件由主文件和索引表构成。  ①主文件:文件本身。  ②索引表:在文件本身外建立的一张表,它指明逻辑记录和物理记录之间的一一对应关系。 2.索引表组成

    http://student.zjzk.cn/course_ware/data_structure/web/wenjian/wenjian10.3.2.htm


    索引文件构成

    1.索引文件

         索引文件由主文件和索引表构成。
      ①主文件:文件本身。
      ②索引表:在文件本身外建立的一张表,它指明逻辑记录和物理记录之间的一一对应关系。

    2.索引表组成
         索引表由若干索引项组成。一般索引项由主关键字和该关键字所在记录的物理地址组成。
      注意:
         索引表必须按主关键字有序,而主文件本身则可以按主关键字有序或无序。

    3.索引顺序文件和索引非顺序文件
    (1)索引顺序文件(Indexed Sequential File)
         主文件按主关键字有序的文件称索引顺序文件。
         在索引顺序文件中,可对一组记录建立一个索引项。这种索引表称为稀疏索引。

    (2)索引非顺序文件(Indexed NonSequentail File)
         主文件按主关键字无序得文件称索引非顺序文件。
         在索引非顺序文件中,必须为每个记录建立一个索引项,这样建立的索引表称为稠密索引。
      注意:
         ① 通常将索引非顺序文件简称为索引文件。
         ② 索引非顺序文件主文件无序,顺序存取将会频繁地引起磁头移动,适合于随机存取,不适合于顺序存取。
         ③ 索引顺序文件的主文件是有序的,适合于随机存取、顺序存取。
         ④ 索引顺序文件的索引是稀疏索引。索引占用空间较少,是最常用的一种文件组织。
         ⑤ 最常用的索引顺序文件:ISAM文件和VSAM文件。

    索引文件的存储

    1.索引文件的存储
         索引文件在存储器上分为两个区:索引区和数据区。索引区存放索引表,数据区存放主文件。

    2. 索引文件的建立
         建立索引文件的过程:
      (1) 按输入记录的先后次序建立数据区和索引表。其中索引表中关键字是无序的
      (2) 待全部记录输入完毕后对索引表进行排序,排序后的索引表和主文件一起就形成了索引文件。
      【例】对于表10.2的数据文件,主关键字是职工号,排序前的索引表如表10.3所示,排序后的索引表见表10.4,表10.2和表10.4一起形成了一个索引文件。

     


    索引文件的操作 

    1.检索操作
         检索分两步进行:
      ① 将外存上含有索引区的页块送人内存,查找所需记录的物理地址
      ② 将含有该记录的页块送人内存
      注意:
      ①索引表不大时,索引表可一次读入内存,在索引文件中检索只需两次访问外存:一次读索引,一次读记录。
      ②由于索引表有序,对索引表的查找可用顺序查找或二分查找等方法。

    2.更新操作
    (1) 插入:
         将插入记录置于数据区的末尾,并在索引表中插入索引项;

    (2) 删除:
         删去相应的索引项;
      注意:
         修改主关键字时,要同时修改索引表。

    利用查找表建立多级索引 

    1.查找表
         对索引表建立的索引,称为查找表。查找表的建立可以为占据多个页块的索引表的查阅减少外存访问次数。
    【例】表10.4的索引表占用了三个页块的外存,每个页块能容纳三个索引项,则可为之建立一个查找表,在查找表中,列出索引表的每一页块最后一个索引项中的关键字(该块中最大的关键字)及该块的地址,如表10.5所示。检索记录时,先查找查找表,再查索引表,然后读取记录,三次访问外存即可。
          

    2.多级索引
         当查找表中项目仍很多,可建立更高一级的索引。通常最高可达四级索引:
         数据文件一索引表一查找表一第二查找表一第三查找表。

      【例】检索过程从最高一级索引--第三查找表开始,需要5次访问外存。
      注意:
         ① 多级索引是一种静态索引
         ② 多级索引的各级索引均为顺序表,结构简单,修改很不方便,每次修改都要重组索引。

    3. 动态索引
         当数据文件在使用过程中记录变动较多时,利用二叉排序树(或AVL树)、B_树(或其变型)等树表结构建立的索引,为动态索引。

    (1)树表特点
      ① 插入、删除方便
      ② 本身是层次结构,无须建立多级索引
      ③ 建立索引表的过程即为排序过程。

    (2)树表结构选择
      ① 当数据文件的记录数不很多,内存容量足以容纳整个索引表时,可采用二叉排序树(或AVL树)作索引;
      ② 当文件很大时,索引表(树表)本身也在外存,查找索引时访问外存的次数恰为查找路径上的结点数。采用m阶B-树(或其变型)作为索引表为宜(m的选择取决于索引项的多少和缓冲区的大小)。

    (3) 外存的索引表的查找性能评价
         由于访问外存的时间比内存中查找的时间大得多,所以外存的索引表的查找性能主要着眼于访问外存的次数,即索引表的深度。



    展开全文
  • MySQL 添加索引,删除索引及其用法

    万次阅读 多人点赞 2019-04-18 10:34:39
    .索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。 在数据量...
  • 索引文件由索引表和主文件两部分构成。 索引表是一张指示逻辑记录和物理记录之间对应关系的表。索引表中的每项称作索引项。索引项是按键(或逻辑记录号)顺序排列...在索引顺序文件中,可对一组记录建立一个索引项。这
  • 文件组织:索引顺序文件

    千次阅读 2013-11-08 23:42:39
    ISAM文件和VSAM文件是常用的索引顺序文件。...由于磁盘是以盘组、柱面和磁道三级地址存取的设备,则可对磁盘上的数据文件建立盘组、柱面和磁道多级索引,下面只讨论在同一个盘组上建立的ISAM文件
  • Lucene6入门教程(四)索引文件格式

    千次阅读 2017-08-23 11:05:12
    Lucene6(四)索引文件格式 要想要理解Lucene6关键还是要对索引的文件格式有所理解的,这是因为,了解到索引文件的格式,有助于深入理解Lucene6的两大功能——索引(全文搜索中倒排写成这文件格式),搜索(在按文件...
  • http://www.itpub.net/thread-1942951-1-1.html在oracle中,建立分区表,然后建立索引的时候有全局索引和本地索引,因为需要定时删除分区,所以建立本地索引,可以在查询的时候走索引,那么全局索引的意义是什么?...
  • 经查看发现有个文件过大(80G),于是在跟有关同事确认后rm -f果断删除文件。但是发现删除文件后,/分区的磁盘空间压根没有释放出来,使用率还是100%!这是为什么呢??123456[root@linux-node1 ~]# df -...
  • 操作系统 文件索引结构

    千次阅读 2019-05-04 09:41:26
    索引结构指一个文件的信息存放在若干不连续的物理块中,系统为每个文件建立一个专用的数据结构——索引表,并将这些块的块号存放在索引表中。有点是保留了链接结构的优点,同时解决了其缺点,即能顺序存取,又能随机...
  • 索引

    千次阅读 2012-09-04 14:33:53
    索引的概念类似于图书中提示用的术语索引。...索引技术(indexing)是一种快速文件访问技术,它将一个文件的每个记录在某个或某些域(属性)上的取值与该记录的物理地址直接联系起来,提供了一种根据
  • Linux/Unix文件系统索引节点浅析

    千次阅读 2014-08-20 18:01:06
    一个例子来说,假设有一个老图书馆里面有一本登记簿,上面记录着馆内的书名及存放 位置,比如在哪一间的第几排存放着哪一本书,以及书的作者是谁。在这里,记录着一本书的那一行就是索引节点。索引节点以同样的...
  • 删除索引 删除全部索引 删除指定索引 更新索引 完整类文件 本文承接《Lucene 中文分词器 Ik-Analyzer 使用教程》、《Lucene 实战之入门案例》,不再创建新项目。 删除索引 当实际的原始文档发生变化之后,...
  • 稠密索引与稀疏索引

    千次阅读 多人点赞 2017-03-11 16:39:06
    在了解稠密索引和稀疏索引之前我们先来了解一下什么是聚焦...也就是说,稠密索引为数据记录文件的每一条记录都设一个键-指针对。如下图所示,索引项包括索引值以及指向该搜索码的第一条数据记录的指针,即我们所说的键
  • Mysql原理解析 - 索引文件的存储结构

    万次阅读 2021-02-10 00:54:40
    Mysql原理解析 - 基本架构前言局部性原理磁盘预读索引是什么?1. MSQL为什么索引选择B+树?1.1 哈希表hash简介:局限性:1.2 二叉树简介:局限性:1.3 AVL树简介:局限性:1.4 红黑...相等的块,每存储块称为页(在
  • Lucene索引文件格式分析

    千次阅读 2010-07-08 09:39:00
     、 Lucene源码实现分析的说明  通过以上对Lucene系统结构的分析,我们已经大致的清楚了...因此,这部分所涉及到的内容,对于Lucene上的应用开发也是有价值的,尤其是本部分所做的文件格式分析。<b
  • mysql建立、删除索引及使用

    千次阅读 2017-01-17 08:45:03
    科技优家 2017-01-16 09:58 ...在数据量和访问量不大的情况下,mysql访问是非常快的,是否加索引对访问影响不大。但是当数据量和访问量剧增的时候,就会发现mysql变慢,甚至down掉,这就必须瑶考虑优
  • 数据库索引之稠密索引和稀疏索引

    千次阅读 2017-09-18 17:13:33
    如上图所示:在稠密索引文件中的每个搜索码值都对应一个索引值。索引项包括索引值以及指向该搜索码值的第一条数据记录的指针。由于该索引符合聚集索引,因此记录根据相同的码值排序。 稀疏索引: 如上图所示:...
  • Git从库中移除已删除文件

    万次阅读 2016-02-23 15:53:06
    写在前面大家一定遇到过在使用Git,不小心将一个很大的文件添加到库中,即使删除记录中还是保存了这个文件。以后不管是拷贝,还是push/pull都比较麻烦。今天在上传工程到github上,发现最大只能上传100MB大小...
  • 3、文件目录思维导图文件...2、什么是FCB:当你建立一个目录或者文件时,会在文件目录中新增一条记录(记录文件的属性),这样的一条记录就称做一个FCB。 3、FCB中最重要的就是文件名和物理地址的映射,从而实现按名存
  • 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引分为聚簇索引和非聚簇...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 270,233
精华内容 108,093
关键字:

删除索引文件的一个记录时