精华内容
下载资源
问答
  • 数据库索引

    千次阅读 多人点赞 2019-08-20 22:49:54
    数据库索引 文章目录数据库索引定义优缺点索引类型建立普通索引或组合索引适合建立索引的情况索引失效的sql 定义 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息...

    数据库索引

    定义

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

    本人对于索引理解较浅,如有错误或不足的地方,欢迎指正,共同学习。

    优缺点

    优点

    • 在设计数据库时,通过创建一个惟一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的惟一性特点。

    • 能提高数据的搜索及检索速度,符合数据库建立的初衷。

    • 能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用。

    • 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

    • 建立索引之后,在信息查询过程中可以使用优化隐藏器,这对于提高整个信息检索系统的性能具有重要意义。

      缺点

    • 在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。

    • 在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间,如果有必要建立起聚簇索引,所占用的空间还将进一步的增加

    • 在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。

    索引类型

    根据数据库的功能,可以在数据库设计器中创建三种索引唯一索引、主键索引和聚集索引。有关数据库所支持的索引功能的详细信息,请参见数据库文档。

    提示:尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键唯一约束

    唯一索引

    UNIQUE
    create unique index 索引名 on 表名(表中的列[(length)])
    alter table 表名 add UNIQUE 索引名 (表中的列[(length)])
    

    唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。

    主键索引

    PRIMARY KEY  -- 建表时自接指定
    alert table 表名 add primary key (表中的列[(length)])
    

    数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

    聚集索引

    在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引和非聚集索引的区别,如字典默认按字母顺序排序(物理顺序),读者如知道某个字的读音可根据字母顺序快速定位(索引顺序与物理顺序相同)。因此聚集索引和表的内容是在一起的。如读者需查询某个生僻字,则需按字典前面的索引,举例按偏旁进行定位,找到该字对应的页数,再打开对应页数找到该字。这种通过两个地方而查询到某个字的方式就如非聚集索引。

    建立普通索引或组合索引

    create index 索引名 on 表名(列名);
    create index 索引名 on 表名(列名1,列名2,..); -- 组合索引
    

    组合索引 最左前缀 原则

    个人理解 例如 : create index index_abc on TEST_TAB(a,b,c); 相当于建立了 a, ab, abc 三组索引。

    只要某查询条件中包含复合索引中的第一个列,该查询就会走索引,如果不包含,就不会走索引

    有博主的实验 https://blog.csdn.net/tw7752/article/details/44595281

    适合建立索引的情况

    • 经常作为查询条件的列 (where)
    • 经常用于表连接的列,如外键 (join)
    • 经常用于排序的列 (order)

    索引失效的sql

    • 组合索引使用 or 索引失效 如 a=1 or b=2 or c=3

    • 索引条件为 is null / is not null 索引失效(看清况,测试过 null 比较多时, not null 会走索引)

    • 索引条件 like ‘%xxx’, 索引失效; like ‘xxxx%’ 索引生效

    • 索引列参加计算 如 t.score/10 > 10 失效, 应改成 t.score > 10*10

    • 索引列不要使用NOT ( != 、 <> )如 t.score! = 10 失效,改成:t.score > 10 or t.score < 10

    • 索引列上发生类型转换, 例如 VARCHAR2 类型的索引列 ,写成 where id = 1 ,应该 改成 where id = ‘1’ ( oracle实验)

    最好是 看一下sql的执行计划,看看是否走了索引。

    Oracle查看sql执行计划

    explain plan for  
    select xxx from tablename where xxx ;
    
    select * from table(dbms_xplan.display); 
    

    索引的原理 请看大神博客 https://blog.csdn.net/sinat_30186009/article/details/52169057

    组合索引设计 https://blog.csdn.net/bless2015/article/details/84035845

    展开全文
  • 数据库索引

    千次阅读 2020-05-14 00:01:50
    什么是数据库索引? 答:索引是定义在table基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一种索引项由索引字段和行指针构成。 索引的好处? ...

    什么是数据库索引?

    答:索引是定义在table基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一种索引项由索引字段和行指针构成。

    索引的好处?

    1. 通过创建索引,可以在查询的过程中,提高系统的性能;
    2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;
    3. 在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间;

    索引的坏处?

    1. 创建索引和维护索引要耗费时间,而且时间随着数据量的增加而增大;
    2. 索引需要占用物理空间,如果要建立聚簇索引,所需要的空间会更大;
    3. 在对表中的数据进行增加删除和修改时需要耗费较多的时间,因为索引也要动态地维护;

    什么是稠密索引和稀疏索引?

    • 稠密索引:对于主文件中每一个记录都对应一个索引项;
      • 候选键属性的稠密索引:先查索引,然后再依据索引读主文件;
      • 非候选键属性的稠密索引:
        • 主文件按索引字段排序,索引文件中的索引字段值无重复;
        • 主文件索引字段未排序,但索引文件中的索引字段值是有重复的;
        • 主文件索引字段未排序且索引文件中的索引字段值无重复,这时可以引入指针桶来处理;
    • 稀疏索引:对于主文件中部分记录有索引项和它对应(要求主文件必须是按对应索引字段属性排序存储);

    什么是主索引和辅助索引?

    • 主索引:对每个存储块有一个索引项,每个存储块的第一个记录叫锚,通常建立在有序文件的基于主码的排序字段上,属于稀疏索引。
    • 辅助索引:是定义在主文件的任一或多个非排序字段上的辅助存储结构,属于稠密索引。

         补充:一个主文件可以有一个主索引,但可以有多个辅助索引。

    什么是聚簇索引和非聚簇索引?

    • 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据,主文件按照对应字段排序存储,索引文件无重复排序存储。
    • 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,主文件并没有按照对应字段排序存储,索引文件有重复排序存储。

    补充:

    1. 如果主文件的某一排序字段不是主码,则该字段上每个记录取值便不唯一,此时该字段被称为聚簇字段,聚簇索引通常是定义在聚簇字段上。
    2. 聚簇索引通常是对聚簇字段上每一个不同值有一个索引项。
    3. 一个主文件只能有一个聚簇索引文件,但可以有多个非聚簇索引文件。
    4. 主索引通常是聚簇索引,辅助索引通常是非聚簇索引
    5. 主索引/聚簇索引是能够决定记录存储位置的索引,而非聚簇索引则只能用于查询,不能改变物理位置。

    为什么主键通常建议使用自增id?

    答:聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的。如果主键不是自增id,那么可以想象,它会干些什么,不断地调整数据的物理地址、分页。

    mysql中聚簇索引的设定?

    答:聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。

    什么是倒排索引和正排索引?

    • 倒排索引:一个词汇包含在哪些文档中,倒排索引主要由两个部分组成:“单词词典”和“倒排文件”,应用于搜索引擎。
    • 正排索引:一个文档包含了哪些词汇。

    其他结构的索引?

    • 多级索引:对索引再建立索引,如B书/B+树等;
    • 多属性索引:索引字段由多个属性组合一起形成的索引;
    • 散列索引:使用散列技术组织的索引;
    • 网络索引:使用多索引字段进行交叉联合定位与检索;

    B+树

    B+树是通过二叉查找树,再由平衡二叉树,B树演化而来。

    二叉排序树:左子树的键值总是小于根的键值,右子树的键值总是大于根的键值,因此可以通过中序遍历得到键值的排序输出。

    平衡二叉树:首先复合二叉查找树的定义,其次必须满足任何节点的两个子树的高度最大差为1.(平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。)

    m阶B-树:树中每个结点至多m棵子树、非叶子结点的根结点至少有两棵子树、除根结点外的非叶子结点至少有m/2棵子树、所有的叶子结点出现在同一层,并且不带信息,通常称为失败结点、树中每个结点的关键字有序,且关键字的左子树中的关键字均小于它,右子树均大于它。(单个节点可以存储多个键值和数据的平衡树)

    m阶B+树:与B-树差异在于有n棵子树的结点中含有n个关键字、所有的叶子节点包含了全部关键字的信息,以及指向这些关键字记录的指针、所有的非终端结点可以看成是索引部分,结点中仅含有其子树中最大的关键字。

    B+树相比B-树的优先?

    1. B+ 树非叶子节点上是不存储数据的,仅存储键值,而 B 树节点中不仅存储键值,也会存储数据,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的 IO 次数又会再次减少,数据查询的效率也会更快。
    2. B+ 树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,使得范围查找,排序查找,分组查找以及去重查找变得异常简单。

    Mysql索引

    • 普通索引

    最基本的索引,它没有任何限制。它有以下几种创建方式:

    CREATE INDEX indexName ON 表名(列名(length));  //创建索引
    ALTER 表名 ADD INDEX [indexName] ON (列名(length))  //修改表结构
    
    CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,INDEX [indexName] (username(length)) ); //创建表时直接创建索引
    
    DROP INDEX [indexName] ON 表名;  //删除索引
    
    • 唯一索引

    它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

    CREATE UNIQUE INDEX indexName ON 表名(列名(length)) 
    
    ALTER 表名 ADD UNIQUE [indexName] ON (列名(length)) 
    
    CREATE TABLE mytable(  
     
    ID INT NOT NULL,   
     
    username VARCHAR(16) NOT NULL,  
     
    UNIQUE [indexName] (username(length))  
     
    );  
    • 主键索引

    它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,即具有primary key约束的字段。

    • 组合索引
    ALTER TABLE 表名 ADD INDEX 索引名 (列名1,列名2,列名3);
    
    

    建立索引的时机是什么?

    答:在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引(以通配符%和_开头作查询时,MySQL不会使用索引)。

    使用索引的注意事项?

    • 索引不会包含有NULL值的列

    只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

    • 使用短索引

    对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

    • 索引列排序

    MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    • like语句操作

    一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

    • 不要在列上进行运算
    • 不使用NOT IN和<>操作

     

    展开全文
  • 达梦数据库索引

    千次阅读 2019-11-13 22:20:46
    达梦数据库索引一、索引概述二、创建索引:三、重建索引:四、删除索引: 一、索引概述 索引的作用:加快对表的查询,数据库对表做DML操作,默认的维护索引。 话外音:用到索引实际是对索引结构的遍历。索引的高度...

    一、索引概述

    索引的作用:加快对表的查询,数据库对表做DML操作,默认的维护索引。

    话外音:用到索引实际是对索引结构的遍历。索引的高度约高,说明数据越多。

    添加索引所具备的基本要求:
    1.经常查询的列;
    2.返回值是表的数据的一小部分;
    3.连接条件的列上;
    4.谓词经常出现的列(如where后面的列)。

    注意:列上有大量数据是null的不建议建索引,原因是索引不会存null

    达梦数据库的索引类型:
    二级索引,复合索引,函数索引,唯一索引,分区索引,位图索引,位图连接索引

    其中二级索引叫二级索引的原因是达梦数据库建表的时候有个默认索引,所以创建的新索引就为二级索引。

    二、创建索引:

    SQL> create table emp as select * from employee;
    
    例子:
    SQL> create tablespace indx datafile '/dm7/indx.dbf' size 32;
    SQL> create index ind_emp on emp (employee_id) tablespace indx;
    SQL> select table_name,index_name from user_indexes where table_name='EMP';
    
    SQL> explain select * from emp where employee_id<100;
    SQL> begin  dbms_stats.gather_table_stats('DMHR','EMP');
    end;---收集统计信息
    /
    

    注意:收集统计信息的动态采样一般在7%到10%之间,不要在系统业务高峰期进行收集统计信息操作。

    三、重建索引:

    SQL> alter index ind_emp rebuild;
    SQL> alter index ind_emp rebuild online;(建议使用)
    

    四、删除索引:

    SQL> drop index ind_emp;
    

    结后语:索引的创建、删除、重建要在非高峰期进行操作

    展开全文
  • 数据库添加索引

    万次阅读 2017-10-25 09:56:05
    1.MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可以直接创建索引。基本的语法格式如下: CREATE TABLE 表名(字段名 数据类型 [完整性约束条件], [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY ...

    1.MySQL在创建数据表的时候创建索引

    在MySQL中创建表的时候,可以直接创建索引。基本的语法格式如下:

    CREATE TABLE 表名(字段名 数据类型 [完整性约束条件],
                      [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
                      [索引名](字段名1 [(长度)] [ASC | DESC])
    );
    • UNIQUE:可选。表示索引为唯一性索引。
    • FULLTEXT;可选。表示索引为全文索引。
    • SPATIAL:可选。表示索引为空间索引。
    • INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。
    • 索引名:可选。给创建的索引取一个新名称。
    • 字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
    • 长度:可选。指索引的长度,必须是字符串类型才可以使用。
    • ASC:可选。表示升序排列。
    • DESC:可选。表示降序排列。

    MySQL创建普通索引

    创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数。

    实例:创建一个名为index1的数据表,在表内的id字段上建立一个普通索引。

    1. 创建普通索引的SQL代码如下:

    CREATE TABLE index1(id INT,
                        name VARCHAR(20),
                        sex BOOLEAN,
                        INDEX(id)
    );

              在DOS提示符窗口中查看MySQL创建普通索引的操作效果。如下图所示:

               

               从上图中可以看出,运行结果显示普通索引创建成功。

    2. 使用SHOW CREATE TABLE语句查看表的结构。如下图所示:

                   

                  从上图中可以看出,在id字段上已经建立了一个名为id的普通索引。

          语句:

          KEY `id` (`id`)

    圆括号内的id是字段名称,圆括号左侧外面的id是索引名称。

    3. 使用EXPLAIN语句查看索引是否被使用。SQL代码如下:

        EXPLAIN SELECT * FROM index1 where id=1 \G

    在DOS提示符窗口中查看使用EXPLAIN语句查看索引是否被使用的操作效果。如下图所示:

            

          上图中的结果显示,possible_keys和key的值都为id。说明id索引已经存在,并且查询时已经使用了索引。


    MySQL创建唯一性索引

    如果使用UNIQUE参数进行约束,则可以创建唯一性索引。

    实例:创建一个名为index2的数据表,在表内的id字段上建立一个唯一性索引,并且设置id字段以升序的形式排列。

    1. 创建一个唯一性索引的SQL代码如下:

    CREATE TABLE index2(id INT UNIQUE,
                        name VARCHAR(20),
                        UNIQUE INDEX index2_id(id ASC)
    );

    index2_id是为唯一性索引起的一个新名字。

          在DOS提示符窗口中查看MySQL创建唯一性索引的操作效果。如下图所示:

            

            从上图中可以看出,运行结果显示创建成功。

    2. 使用SHOW CREATE TABLE语句查看表的结构。SQL代码如下:

    SHOW CREATE TABLE index2 \G

    在DOS提示符窗口中查看使用SHOW CREATE TABLE语句查看表的结构的效果。如下图所示:

           

    从上图中可以看出,在id字段上建立了名为id和index2_id的两个唯一性索引。这样做,可以提高数据的查询速度。

    如果在创建index2表时,id字段没有进行唯一性结束。如下所示:

    CREATE TABLE index2(id INT,
                        name VARCHAR(20),
                        UNIQUE INDEX index2_id(id ASC)
    );

    则也可以在id字段上成功创建名为index2_id的唯一性索引。但是,这样可能达不到提高查询速度的目的。


    MySQL创建全文索引

    全文索引使用FULLTEXT参数,并且只能在CHAR、VARCHAR或TEXT类型的字段上创建。

    全文索引可以用于全文搜索。

    现在,MyISAM存储引擎和InnoDB存储引擎都支持全文索引。

    实例:创建一个名为index3的数据表,在表中的info字段上建立名为index3_info的全文索引。

    1. 创建全文索引的SQL代码如下:

    CREATE TABLE index3(id INT,
                        info VARCHAR(20),
                        FULLTEXT INDEX index3_info(info)
    )ENGINE=MyISAM;

    如果设置ENGINE=InnoDB,则可以在InnoDB存储引擎上创建全文索引。

    在DOS提示符窗口中查看MySQL创建全文索引的操作效果。如下图所示:

             

    从上图中可以看出,代码的执行结果显示创建成功。

    2. 使用SHOW CREATE TABLE语句查看index3数据表的结构。如下图所示:

    从上图中可以看出,在info字段上已经建立了一个名为index3_info的全文索引。

    注意

    我使用的是MySQL 5.6.19版本,已经可以在InnoDB存储引擎中创建全文索引了。

    全文索引非常适合于大型数据集,对于小的数据集,它的用处可能比较小。


    MySQL创建单列索引

    单列索引是在数据表的单个字段上创建的索引。一个表中可以创建多个单列索引。唯一性索引和普通索引等都为单列索引。

    实例:创建一个名为index4的数据表,在表中的subject字段上建立名为index4_st的单列索引。

    1. 创建单列索引的SQL代码如下:

    CREATE TABLE index4(id INT,
                        subject VARCHAR(30),
                        INDEX index4_st(subject(10))
    );

    在DOS提示符窗口中查看MySQL创建单列索引的操作效果。如下图所示:

           

    从上图中可以看出,代码执行的结果显示创建成功。

    2. 使用SHOW CREATE TABLE语句查看index4数据表的结构。如下图所示:

              

    从上图中可以看出,在subject字段上已经建立了一个名为index4_st的单列索引。

    注意:subject字段长度为30,而index4_st设置的索引长度只有10,这样做是为了提高查询速度。对于字符型的数据,可以不用查询全部信息,而只查询它前面的若干字符信息。


    MySQL创建多列索引

    创建多列索引是在表的多个字段上创建一个索引。

    实例:创建一个名为index5的数据表,在表中的name和sex字段上建立名为index5_ns的多列索引。

    1. 创建多列索引的SQL代码如下:

    CREATE TABLE index5(id INT,
                        name VARCHAR(20),
                        sex CHAR(4),
                        INDEX index5_ns(name,sex)
    );

    在DOS提示符窗口中查看MySQL创建多列索引的操作效果。如下图所示:

            

    从上图中可以看出,代码的执行结果显示index5_ns索引创建成功。

    2. 使用SHOW CREATE TABLE语句查看index5数据表的结构。如下图所示:

             

    从上图中可以看出,name和sex字段上已经建立了一个名为index5_ns的多列索引。

    3. 多列索引中,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。

    先在index5数据表中添加一些数据记录,然后使用EXPLAIN语句可以查看索引的使用情况。如果只是使用name字段作为查询条件进行查询。如下图所示:

              

    从上图中可以看出,possible_keys和key的值都是index5_ns。Extra(额外信息)显示正在使用索引。这说明使用name字段进行索引时,索引index5_ns已经被使用。

    4. 如果只使用sex字段作为查询条件进行查询。如下图所示:

               

    从上图中可以看出,possible_keys和key的值都是NULL。Extra(额外信息)显示正在使用where条件查询,而未使用索引。

    提示

    使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。因此,在优化查询速度时,可以考虑优化多列索引。


    MySQL创建空间索引

    使用SPATIAL参数能够创建空间索引。创建空间索引时,表的存储引擎必须是MyISAM类型。而且,索引字段必须有非空约束。

    实例:创建一个名为index6的数据表,在表中的space字段上建立名为index6_sp的空间索引。

    1. 创建空间索引的SQL代码如下:

    CREATE TABLE index6(id INT,
                        space GEOMETRY NOT NULL,
                        SPATIAL INDEX index6_sp(space)
    )ENGINE=MyISAM;

    在DOS提示符窗口中查看MySQL创建空间索引的操作效果。如下图所示:

           

    从上图可以看出,代码执行的结果显示空间索引创建成功。

    2. 使用SHOW CREATE TABLE语句可看index6数据表的结构。如下图所示:

            

    从上图中可以看出,在space字段上已经建立了一个名为index6_sp的空间索引。

    注意,space字段是非空的,而且数据类型是GEOMETRY类型。这个类型是空间数据类型。

    空间数据类型包括GEOMETRY、POINT、LINESTRING和POLYGON类型等。这些空间数据类型平时很少用到

    2添加索引

    1.添加PRIMARY KEY(主键索引) 
    mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 
    2.添加UNIQUE(唯一索引) 
    mysql>ALTER TABLE `table_name` ADD UNIQUE ( 
    `column` 

    3.添加INDEX(普通索引) 
    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 
    4.添加FULLTEXT(全文索引) 
    mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
    5.添加多列索引 
    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

    展开全文
  • 数据库实用索引优化

    千次阅读 2016-04-06 22:20:00
    数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引分为聚簇索引(聚集索引)和非聚簇索引(非聚集索引)两种...
  • 修改Mysql数据库索引

    千次阅读 2019-06-20 11:16:06
    原来的数据库索引 UNIQUE KEY `tablename` (`column1`,`column2`) USING BTREE 需要把column1,column2进行调换(以便使用column1进行百万级别查询)。 解决 没找到直接修改索引的方法(有的话可以大家一起交流),...
  • 数据库建立索引怎么利用索引查询

    千次阅读 2019-03-05 11:32:04
    数据库建立索引怎么利用索引查询?精选 1.合理使用索引 索引数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。 索引的使用要恰到好处,其...
  • 数据库索引(index)介绍

    千次阅读 2019-01-16 10:14:15
    本文主要介绍数据库索引(index)的相关知识。 1 概述 1.1 What 数据库中的索引(index),是数据库管理系统(DBMS)中的一个排序的数据结构,用于协助快速查询、更新数据库表中的数据。 除了实际需要使用的...
  • 数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化...
  • 数据库计算索引区分度

    千次阅读 2018-11-21 10:03:40
    如何正确的建立数据库表字段索引 1、索引不是在创建表的时候创建的;系统在运行一个阶段后创建索引。 2、对于主键、外键、排序等字段优先加索引。 3、其它字段在建立索引的时候需要计算字段的区分度,计算SQL如下...
  • 数据库创建索引的规则

    千次阅读 2018-07-29 00:12:50
    数据库适合创建索引的规则如下: 表的主键,外键应该创建索引; 数据量比较大的表应该创建索引; 经常需要和其他表建立连接,在连接字段应该创建索引; 经常出现在where子句中的字段,应该创建索引数据库不...
  • 数据库增加索引

    千次阅读 2014-03-19 11:44:29
    数据库增加索引是为了增加查询速度而对表字段 附加的一种标识。见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处。 这里想把之前的索引学习笔记总结一下:  首先明白为什么索引会增加...
  • 当一条sql语句的查询涉及到多个字段,这个时候给每个字段加索引数据库也只能够使用其中的一个索引,这个时候使用复合索引就比较好了。这是为什么呢? 这是因为:全表扫描/只使用一个索引的速度比起来,去分析两个...
  • 数据库组合索引

    千次阅读 2018-03-12 14:59:07
    2018、03、12面试中的问题组合索引是什么?组合索引建立的原则。b树和b+树的区别。一次查询只能用到一个索引,所以 首先枪毙 a,b各建索引方案a还是b? 谁的区分度更高(同值的最少),建谁!当然,联合索引也是个...
  • 1.索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引中包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(BTree)中,使SQL可以快速有效地查找与键值关联的行...
  • Sybase数据库索引

    千次阅读 2018-12-30 12:06:48
    创建Sybase数据库索引应该在建数据表之后 创建语句如下: create index index_name on table_name(column_names) 删除index: drop index table.index 使用sp_help tablename查看建立在某张表上的index...
  • oracle数据库建立索引

    2011-09-28 23:59:06
    oracle数据库中如何建立索引,建立索引有什么优势,索引该如何使用
  • 1.什么是索引?为什么要用索引? 1.1索引的含义 1.2为什么用? 2.索引的作用与缺点 2.1作用 2.2缺点 3.索引的使用场景 3.1应创建索引的场景 3.2不应创建索引的场景 4.索引的分类与说明 4.1主键索引 ...
  • 数据库索引详解

    千次阅读 2017-04-08 10:43:43
    索引的重要性:当你的数据库的性能出现问题了,那么就重新优化你的索引吧,这能够解决80%的性能问题,由此可见索引的重要性,尤其在数据量越来越大的时候,影响更加的明显,一个最优的索引能够轻易的将查询性能提高...
  • 数据库索引原理 索引作用 索引是用来快速查找特定值的记录。如果没有索引、一般来说执行查询时会遍历整个表。索引就是把无须的数据变成有序的,然后提高查询效率。 索引案例 索引原理 1、把创建了索引的列进行排序...
  • MySQL数据库索引的实现原理

    万次阅读 多人点赞 2018-06-25 10:22:41
    一、MySQL索引的数据结构: 常见的索引的数据结构有:B+Tree、Hash索引。 1、Hash索引: MySQL中,只有Memory存储引擎支持hash索引,是Memory表的默认索引类型。hash索引把数据以hash值形式组织起来,因此检索...
  • 数据库索引实践经验·关于数据库建索引和插数据两者先后顺序对效率的影响   案例2·新数据库建索引和导数据   (1) 先定义索引 (schema) 再 (2) load 数据 比 (2)(1)快的理论分析(前提是实践...
  • 数据库索引的优缺点和分类

    千次阅读 2016-08-19 16:42:42
    数据库索引类似于书籍的索引。 在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库. 2、索引的优点  1.创建唯一...
  • 数据库建立索引的原则

    千次阅读 2010-11-03 16:15:00
    数据库建立索引的原则
  • 数据库添加索引

    千次阅读 2014-03-24 10:45:22
    PHP在连接数据库方面的确实是十分方便(译者注:有些人认为PHP在连接不同数据库时没有一个统一的接口,不太方便,其实这可以通过一些扩展库来... 前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊
  • 数据库建立索引常用的规则

    千次阅读 2019-08-01 19:04:11
    数据库建立索引常用的规则如下: 1、表的主键、外键必须有索引;  2、数据量...
  • 为mysql数据库建立索引

    千次阅读 2016-01-13 16:18:35
    为mysql数据库建立索引 前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 780,018
精华内容 312,007
关键字:

数据库加索引