精华内容
下载资源
问答
  • 数据库建立索引常用的原则

    万次阅读 2018-09-18 10:59:20
    3、经常与其他进行连接的,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长...

    1、表的主键、外键必须有索引;

    2、数据量超过300的表应该有索引;

    3、经常与其他表进行连接的表,在连接字段上应该建立索引;

    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

    5、索引应该建在选择性高的字段上;

    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
            

             A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

             B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

             C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

             E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

    8、频繁进行数据操作的表,不要建立太多的索引;
    9、删除无用的索引,避免对执行计划造成负面影响;

           以上是一些普遍的建立索引时的判断依据,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。 另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。
           总的来说,小型表肯定不建索引,或者数据库记录在亿条数据级以上,还是建议使用非关系型数据库。还有些特殊字段的数据库,比如BLOB,CLOB字段肯定也不适合建索引。其实这个问题更感觉偏向于做软件项目的一种经验。

    展开全文
  • 数据库表建立索引的优缺点

    千次阅读 2019-11-04 00:40:31
    1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 3.可以加速之间的连接,特别是在实现数据的参考完整性方面特别有意义。 4....

    优点:

    1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 
    2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。     
    3.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。  
    4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。  
    5.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
    缺点:

    1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 
    2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 
    2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    一般来说,应该在这些列上创建索引:

    1.在经常需要搜索的列上,可以加快搜索的速度; 
    2.在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 
    3.在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度; 
    4.在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 
    5.在经常需要排序的列上创 建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; 
    6.在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

    一般来说,不应该创建索引的的这些列具有下列特点:

    1.对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
    2.对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
    3.对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
    4.当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引

    展开全文
  • oracle数据库分区表建立索引

    千次阅读 2017-10-12 18:06:01
    分区和一般一样可以建立索引,分区可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。 1. 局部索引分区的建立:create index idx_t on AAA(id)   ...

    分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。

    1.       局部索引分区的建立:create index idx_t on AAA(id) 
     local 

    partition idx_1 tablespace space01, 
    partition idx_2 tablespace space02, 
    partition idx_3 tablespace space03 
    );

    2.       全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:create index idx_t on AAA(id)
    global partition by range(id) 

    partition idx_1 values less than (1000) tablespace space01, 
    partition idx_2 values less than (10000) tablespace space02, 
    partition idx_3 values less than (maxvalue) tablespace space03 
    );

    当然也可以不指定索引分区名直接对整个表建立索引:

    create index idx_t on AAA(id);






    参考:http://blog.csdn.net/kobejayandy/article/details/8774949

    展开全文
  • 只有它的第一个列被where子句引用时,优化器才会使用该索引) 3、小不要简历索引 4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引 5、列中有很多空值,但经常查询该列上非空记录时应该建立索引 ...

    我现在有一个SQL语句 
    SELECT FAQID,
    FAQNAME,
    TYPE,
    CREATOR,
    TOQUESTION,
    SUPERCODE
    FROM T_KBS_FAQ t
    where TYPE = '1' 
    <[AND FAQID = :faqId]>
    <[AND FAQNAME like '%' ||:faqName || '%']>
    <[AND CREATOR = :creator]>
    <[AND SUPERCODE=:superCode]>
    <[AND TOQUESTION=:toQuestion]>
    <%:toKngType%>
    现在数据过大 导致查询很慢,如何优化? 要建立几个字段建立索引怎么样建立, 建立好了如何使用 SQL语句又该怎写?

    -------------------------------------------------------------------------------------------------------------------------------------------------

    nameidrowid  rowidid
    王一           1x001  x001               1
    王二           2x002  x002               2
    王三           3x003  x003               3
        索引
    select * from 表 where id = 3
    索引是由where条件触发的 ,此查询语句中指定id=3,因为有索引直接从索引段中找到id=3对应的rowid,然后就可以快速用rowid快速找到表中的记录,如果没有索引,就是一行一行的查找id=3的记录

    下面写几种常见索引的创建吧:

    (1) create index 索引名 on 表(字段名);     //创建B树索引,一般用的OLTP中

    (2) create bitmap index 索引名 on 表(字段名);   //创建位图索引,一般用的OLAP中

    (3) create index 索引名 on 表名 (substr(字段,1,10))  

    //创建函数索引,有些时候呢,咱们的搜索条件要加上函数,这种情况呢,普通索引就不能解发了,就要创建函数索引

    (4) create index 索引名 on 表名 (字段1,字段2......字段n);

    //复合索引,当条件中,经常去查询多个条件时,可以把多个条件放在一个索引中

    (5)  create index 索引名 on 表(字段 desc);   //排序后创建索引

    (6) create index 索引名 on 表名 (字段) reverse; //反转索引,消除热点块

    (7) create index 索引名 on 表名(字段) local;   //创建分区本地索引

    (8) create index 索引名 on 表名 (字段) global;   //创建分区全局索引

    扩展资料:


    1、如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引
    2、至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引
    3、小表不要简历索引
    4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引
    5、列中有很多空值,但经常查询该列上非空记录时应该建立索引
    6、经常进行连接查询的列应该创建索引
    7、使用create index时要将最常查询的列放在最前面
    8、LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引
    9、限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)


    附加维护索引基本操作手段:


    查看指定表上现有索引详情
    select t.INDEX_NAME,t.COLUMN_NAME,i.index_type  from user_ind_columns t,user_indexes i where t.index_name = i.index_name and  t.table_name='表名';


    查看索引及列

    select t.index_name,t.status from user_indexes t where t.INDEX_NAME in ();

    查看指定分区表的所有索引


    select t.INDEX_NAME,t.COLUMN_NAME,i.index_type from 

    user_ind_columns t,user_indexes i where t.index_name = i.index_name and  

    t.table_name='表名';
    查询分区索引状态

    select PARTITION_NAME,STATUS from DBA_IND_PARTITIONS where INDEX_NAME='';

    valid:当前索引有效

    N/A :分区索引 有效

    unusable:索引失效

    重新建立索引

    ALTER INDEX 用户.索引 REBUILD;

    展开全文
  • 深入了解-数据库索引

    万次阅读 2018-05-01 11:03:02
    我们先看看索引的定义:[在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个中一列或若干列值的集合和相应的指向中物理标识这些值的数据页的逻辑指针清单。...
  • oracle数据库建立索引

    2011-09-28 23:59:06
    oracle数据库中如何建立索引建立索引有什么优势,索引该如何使用
  • 数据库建立索引常用的规则

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

    千次阅读 2019-05-09 19:22:09
    索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个时,使用索引往往能使查询速度加快成千上万倍。 例如,有3个未索引...
  • 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快 数据的检索速度,这也是创建...
  • 用lucene对数据库建立索引及搜索.doc
  • 索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引;  2. ...
  • 数据库--索引详解

    千次阅读 多人点赞 2018-08-08 22:34:52
    数据库索引是用于提高数据库表的数据访问速度的。想要理解索引原理必须清楚一种数据结构「平衡树」(非二叉),也就是b tree或者 b+ tree,重要的事情说三遍:“平衡树,平衡树,平衡树”。当然, 有的数据库也使用...
  • 数据库之创建索引

    千次阅读 2020-12-04 08:45:00
    一般情况下,在没有建立索引的时候,mysql需要扫描全及扫描10W条数据找这条数据。这样就会浪费大量的时间,严重影响我们的工作效率。 如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条...
  • oracle数据库索引

    千次阅读 2021-03-26 09:44:01
    CREATE INDEX IDEN_IDNUMBER–>索引名称 ON SIDENTITY–>表名 ( IDNUMBER–>字段名 );
  • SQL 如何建立索引来加快数据库的查询

    千次阅读 多人点赞 2020-04-02 18:35:25
    文章目录1. 什么是索引2. 索引的特点3. 索引的分类3.1. 普通索引3.2. 唯一索引(unique)3.3. 主键索引(primary key)3.4. 单列索引3.5. 组合索引3.6.... 创建时创建索引5.2.2. 在已经存在的上...
  • 数据库建立索引的好处与坏处

    千次阅读 2018-04-26 13:23:49
    第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速之间的连接,特别是在实现数据的参考完整性方面特别有...
  • 数据库索引 建立方法

    千次阅读 2016-04-20 15:08:18
    建立索引之后查找和修改,排序等操作可以省很多时间。 索引是对数据库表中一个或多个列(例如,employee 的姓名 (name) 列)的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在中搜索所有的行
  • Oracle数据库索引的创建

    千次阅读 2018-09-12 19:00:18
    数据库建立的时候 如果数据和索引数据不需要分开  建表时直接指定主键索引  CREATE TABLE VOAMASTM (   "REFCODE" NUMBER(10) DEFAULT 0 NOT NULL ,   "OWNERREFCODE" NUMBER(10) ...
  • 我连什么是索引都不是很清晰明了,你给我讲什么建立索引的时机?!!! 是的,很多同学只是有所耳闻,并且可能就是只知道索引可以优化sql效率,但是至于其所以然并不清晰。那么我们现在先谈谈什么是索引。 ...
  • 数据库索引的理解及适合建立索引的字段

    万次阅读 多人点赞 2018-03-06 13:17:43
    转载深入浅出数据库索引原理,哪些字段适合建立索引 问题 为什么要给加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入、修改、删除变慢? 什么情况下要同时在两个字段上建索引? 这些问题...
  • 3、查询用户索引(非聚集索引): 4、查询用户的主键(聚集索引): 5、查询索引 6、查询的主键 7、查找的唯一性约束(包括名称,构成列): 8、查找的外键 查询外键约束的列名: 查询引用的键的...
  • 数据库 视图、索引建立与查看

    千次阅读 2018-10-02 17:46:17
    视图建立建立一张虚) create view IS_Student AS select Sno,Sname,Sage  from Student where Sdept='IS'; 视图查看(视图是一张虚 当普通查询即可...--为SC按照学号升序 课程号降序 建立唯一索引 cr...
  • 数据库建立索引的优缺点

    千次阅读 2019-04-01 14:21:34
    索引就像是书的目录,是与或视图关联的磁盘上结构,可以加快从或视图中检索行的速度。索引中包含由或视图中的一列或多列生成的键。...③ 建立索引可以加快之间的连接 ④ 为用来排序或者是...
  • 答:不一定 建立太多的索引将会影响更新和插入的...对于一个经常需要更新和插入 的表格,就没有必要为一个很少使用的 where 子句单独建立索引了,对于比较小的,排序的开销不会很大,也没有必要建立另外的索引。 ...
  • 为什么要建立索引?  索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个,直到找出相关的行,越大,查询数据所花费的时间就越多,如果中查询的列有一个索引,MySQL...
  • 数据库建立索引怎么利用索引查询

    千次阅读 2019-03-05 11:32:04
    数据库建立索引怎么利用索引查询?精选 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。 索引的使用要恰到好处,其...
  • 数据库本就具有检索功能,使用标准的Sql语句很容易从一个中获取指定的内容。 另一方面,越来越多的应用系统要求文本的模糊查找,各大数据库厂商提供了各种全文检索的索引功能,来支持全文检索,但是效果一般,...
  • 数据库表添加索引对性能的影响

    千次阅读 2018-04-27 14:59:06
    1.添加索引后查询速度会变快 mysql中索引是存储引擎层面用于快速查询找到记录的一种数据结构,索引对性能的影响非常重要,特别是中数据量很大的时候,正确的索引会极大的提高查询效率。简单理解索引,就相当于一...
  • 数据库索引

    万次阅读 多人点赞 2018-11-11 09:27:25
    数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树) 除了数据之外,数据库系统还维护为满足特定查找算法的数据...
  • 如何在达梦数据库中创建索引

    千次阅读 2020-09-05 15:32:48
    可以使用CREATE INDEX语句明确地创建索引,例如在emp的ename列上创建一个名为emp_ename的索引,该索引使用空间users。 SQL> create index emp_ename on emp(ename) STORAGE(INITIAL 50,NEXT 50,ON USERS); 该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 353,558
精华内容 141,423
关键字:

数据库表怎么建立索引