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

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

    数据库建立索引常用的规则如下:

    1、表的主键、外键必须有索引; 
    2、数据量超过300的表应该有索引; 
    3、经常与其他表进行连接的表,在连接字段上应该建立索引; 
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 
    5、索引应该建在选择性高的字段上; 
    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 
    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

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

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

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

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

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

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


    对千万级MySQL数据库建立索引的事项及提高性能的手段

    一、注意事项:

    首先,应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。 
    其次,在对建立索引的时候要对表进行加锁,因此应当注意操作在业务空闲的时候进行。

    二、性能调整方面:

    首当其冲的考虑因素便是磁盘I/O。物理上,应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻辑上,数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。

    其次,我们知道,在建立索引的时候要对表进行全表的扫描工作,因此,应当考虑调大初始化参数db_file_multiblock_read_count的值。一般设置为32或更大。

    再次,建立索引除了要进行全表扫描外同时还要对数据进行大量的排序操作,因此,应当调整排序区的大小。

    9i之前,可以在session级别上加大sort_area_size的大小,比如设置为100m或者更大。

    9i以后,如果初始化参数workarea_size_policy的值为TRUE,则排序区从pga_aggregate_target里自动分配获得。

    最后,建立索引的时候,可以加上nologging选项。以减少在建立索引过程中产生的大量redo,从而提高执行的速度。

    MySql在建立索引优化时需要注意的问题

    设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。设计MySql索引的时候有一下几点注意:

    1,创建索引

    对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。

    2,复合索引

    比如有一条语句是这样的:select * from users where area=’beijing’ and age=22; 
    如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效 
    率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, 
    salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀 
    特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

    3,索引不会包含有NULL值的列

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

    4,使用短索引

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

    5,排序的索引问题

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

    6,like语句操作

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

    7,不要在列上进行运算

    select * from users where 
    YEAR(adddate)

    8,不使用NOT IN和操作

    NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id3则可使用id>3 or id


    添加索引示例:

    添加索引示例:

    
     
    1. CREATE INDEX IDX_AUDITSTATUS ON [shanghaiDB].[dbo].[Activity](AUDITSTATUS) WITH( ONLINE= ON)
    2. CREATE INDEX IDX_ANUMMID ON [nantongDB].[dbo].[Orders](ANUM, MID) WITH( ONLINE= ON)
    3. CREATE INDEX IDX_SiteCode ON Usercenter.[dbo].MO(SiteCode) WITH( ONLINE= ON)
    4. CREATE INDEX IDX_AccessDt ON [all].[dbo].[AccessLog](AccessDt) WITH( ONLINE= ON)

    Create index注意n如果是大表建立索引,切记加上ONLINE参数

    Create index注意n如果是大表建立索引,切记加上ONLINE参数

    这几天在做数据库的优化,有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (entp_id,sell_date),结果悲剧了,把所有的DML语句都阻塞了,导致系统不能正常使用,还好是晚上10点,用户不是非常多,1个小时候,索引结束,阻塞解决;

    上网查了一下,如果加上 online参数后,就可以在线做索引,而不需要阻塞所有的DML语句,血的教训,拿出来与各位共勉,具体online与不加online区别如下:

    1. DML操作对create index 的影响。 如果在create的时候,有其他的进程在对这个index 所对应的数据进行DML操作,create会受影响:

    
     
    1. SQL> create table test (id number, name varchar2(20));
    2. Table created.
    •  

    然后重新开一个session:

    
     
    1. SQL> insert into test values ( 1, 'lms');
    2. 1 row created.
    3. <no commit>
    4. SQL> create index t1 on test(id);
    5. create index t1 on test(id)
    6. *
    7. ERROR at line 1:
    8. ORA- 00054: resource busy and acquire with NOWAIT specified
    •  

    2. 加online这个参数,这个参数加上以后,除了create过程中index 保持online状态,Oracle还会在create index之前等待所有DML操作结束,然后得到DDL锁,开始create.

    
     
    1. SQL> create index t1 on test(id) online;
    2. <hold before commit>
    3. <after commit>
    4. SQL> commit;
    5. Commit complete.
    6. Index altered.
    •  

    如果不commit,上面的操作就会一直hold。

    所以以后create索引和rebuild索引的时候最好加上online。

    展开全文
  • 数据库建立索引常用的原则

    万次阅读 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-04-01 14:21:34
    为什么要建立索引,即索引的优点: ① 建立索引的列可以保证行的唯一性,生成唯一的rowId ② 建立索引可以有效缩短数据的检索时间 ③ 建立索引可以加快表与表之间的连接 ④ 为用来排序或者是...

    索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引中包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(BTree)中,使SQL可以快速有效地查找与键值关联的行。

    为什么要建立索引,即索引的优点:
    ① 建立索引的列可以保证行的唯一性,生成唯一的rowId

    ② 建立索引可以有效缩短数据的检索时间

    ③ 建立索引可以加快表与表之间的连接

    ④ 为用来排序或者是分组的字段添加索引可以加快分组和排序顺序

    索引的缺点:
    ① 创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大

    ② 创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大(数据表占据的是数据库的数据空间)

    ③ 会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长

    什么样的表跟列要建立索引:
    ① 总的来说就是数据量大的,经常进行查询操作的表要建立索引

    ② 表中字段建立索引应该遵循几个原则:

    1. 越小的数据类型通常更好:越小的数据类型通常在磁盘、内存中都需要更少的空间,处理起来更快。

    2. 简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂,处理起来也更耗时。

    3. 尽量避免NULL:应该指定列为NOT NULL。含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

    4. 对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义,所以索引的建立应当更多的选取唯一性更高的字段。

    ③ 表与表连接用于多表联合查询的约束条件的字段应当建立索引

    ④ 用于排序的字段可以添加索引,用于分组的字段应当视情况看是否需要添加索引。

    ⑤ 添加多列索引的时候,对应的多条件查询可以触发该索引的同时,索引最左侧的列的单条件查询也可以触发。

    ⑥ 如果有些表注定只会进行查询所有,也就没必要添加索引,因为查询全部只能进行全量搜索即扫描全表。

    索引的原理:
    索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后找到相匹配的数据就把他放到结果集中,直到全表扫描完。而建立索引之后,会将建立索引的KEY值放在一个n叉树上(BTree)。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索,次数约为log总条数,底数为页面存储数,例如一个100万数据的表,页面存储数为100,那么有索引的查询次数为3次log1000000100,但是全量搜索为100万次搜索,这种方式类似于二分法,但是这个是n分法。

    索引对增删改的影响实际数据修改测试:

    一个表有字段A、B、C,同时进行插入10000行记录测试

    在没有建索引时平均完成时间是2.9秒

    在对A字段建索引后平均完成时间是6.7秒

    在对A字段和B字段建索引后平均完成时间是10.3秒

    在对A字段、B字段和C字段都建索引后平均完成时间是11.7秒

    从以上测试结果可以明显看出索引对数据修改产生的影响

    转自:https://blog.csdn.net/miracleww/article/details/53352738

    展开全文
  • 数据库之创建索引

    千次阅读 2020-12-04 08:45:00
    索引有什么用? 假设有一张表,表的数据有10W条数据,其中有一...如果我nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css’的数据,这样我们就很轻松的找到名字叫‘小明’的那一行或者多行

    索引有什么用?
    假设有一张表,表的数据有10W条数据,其中有一条数据是name=‘小明’,如果要拿这条数据的话需要写的sql是 SELECT * FROM user WHERE name = ‘小明’。
    一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据。这样就会浪费大量的时间,严重影响我们的工作效率。
    如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css’的数据,这样我们就很轻松的找到名字叫‘小明’的那一行或者多行…
    就好像羊群里给一只羊绑一根线,我们就可以很轻松把它拉出来。

    mysql的索引分为单列索引(主键索引,唯索引,普通索引)和组合索引.

    单列索引:一个索引只包含一个列,一个表可以有多个单列索引.

    组合索引:一个组合索引包含两个或两个以上的列,

    我在网上找到一个例子:
    本文使用的案例的表

    CREATE TABLE award (
    id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用户id’,
    aty_id varchar(100) NOT NULL DEFAULT ‘’ COMMENT ‘活动场景id’,
    nickname varchar(12) NOT NULL DEFAULT ‘’ COMMENT ‘用户昵称’,
    is_awarded tinyint(1) NOT NULL DEFAULT 0 COMMENT ‘用户是否领奖’,
    award_time int(11) NOT NULL DEFAULT 0 COMMENT ‘领奖时间’,
    account varchar(12) NOT NULL DEFAULT ‘’ COMMENT ‘帐号’,
    password char(32) NOT NULL DEFAULT ‘’ COMMENT ‘密码’,
    message varchar(255) NOT NULL DEFAULT ‘’ COMMENT ‘获奖信息’,
    created_time int(11) NOT NULL DEFAULT 0 COMMENT ‘创建时间’,
    updated_time int(11) NOT NULL DEFAULT 0 COMMENT ‘更新时间’,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT=‘获奖信息表’;

    (一)索引的创建

    1.单列索引

    1-1) 普通索引,这个是最基本的索引,

    其sql格式是 CREATE INDEX IndexName ON TableName(字段名(length)) 或者 ALTER TABLE TableName ADD INDEX IndexName(字段名(length))

    第一种方式 :

    CREATE INDEX account_Index ON award(account);
    第二种方式:

    ALTER TABLE award ADD INDEX account_Index(account)

    如果是CHAR,VARCHAR,类型,length可以小于字段的实际长度,如果是BLOB和TEXT类型就必须指定长度,

    1-2) 唯一索引,与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是他允许有空值,

    其sql格式是 CREATE UNIQUE INDEX IndexName ON TableName(字段名(length)); 或者 ALTER TABLE TableName ADD UNIQUE (column_list)

    CREATE UNIQUE INDEX account_UNIQUE_Index ON award(account);
    1-3) 主键索引,不允许有空值,(在B+TREE中的InnoDB引擎中,主键索引起到了至关重要的地位)

    主键索引建立的规则是 int优于varchar,一般在建表的时候创建,最好是与表的其他字段不相关的列或者是业务不相关的列.一般会设为 int 而且是 AUTO_INCREMENT自增类型的

    2.组合索引

    一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称

    其sql格式是 CREATE INDEX IndexName On TableName(字段名(length),字段名(length),…);

    CREATE INDEX nickname_account_createdTime_Index ON award(nickname, account, created_time);

    如果你建立了 组合索引(nickname_account_createdTime_Index) 那么他实际包含的是3个索引 (nickname) (nickname,account)(nickname,account,created_time)

    在使用查询的时候遵循mysql组合索引的"最左前缀",下面我们来分析一下 什么是最左前缀:及索引where时的条件要按照建立索引的时候字段的排序方式。
    1、不按索引最左列开始查询(多列索引) 例如index(‘c1’, ‘c2’, ‘c3’) where ‘c2’ = ‘aaa’ 不使用索引,where c2 = aaa and c3=sss 不能使用索引

    2、查询中某个列有范围查询,则其右边的所有列都无法使用查询(多列查询)

    Where c1= ‘xxx’ and c2 like = ‘aa%’ and c3=’sss’ 改查询只会使用索引中的前两列,因为like是范围查询

    3、不能跳过某个字段来进行查询,这样利用不到索引,比如我的sql 是

    explain select * from award where nickname > ‘rSUQFzpkDz3R’ and account = ‘DYxJoqZq2rd7’ and created_time = 1449567822; 那么这时候他使用不到其组合索引.

    因为我的索引是 (nickname, account, created_time),如果第一个字段出现 范围符号的查找,那么将不会用到索引,如果我是第二个或者第三个字段使用范围符号的查找,那么他会利用索引,利用的索引是(nickname),

    因为上面说了建立组合索引(nickname, account, created_time), 会出现三个索引

    (3)全文索引

    文本字段上(text)如果建立的是普通索引,那么只有对文本的字段内容前面的字符进行索引,其字符大小根据索引建立索引时申明的大小来规定.

    如果文本中出现多个一样的字符,而且需要查找的话,那么其条件只能是 where column lick ‘%xxxx%’ 这样做会让索引失效

    .这个时候全文索引就祈祷了作用了

    ALTER TABLE tablename ADD FULLTEXT(column1, column2)
    有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。

    ELECT * FROM tablename
    WHERE MATCH(column1, column2) AGAINST(‘xxx′, ‘sss′, ‘ddd′)
    这条命令将把column1和column2字段里有xxx、sss和ddd的数据记录全部查询出来。

    (二)索引的删除

    删除索引的mysql格式 :DORP INDEX IndexName ON TableName

    (三)使用索引的优点

    1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.
    2.建立索引可以大大提高检索的数据,以及减少表的检索行数
    3.在表连接的连接条件 可以加速表与表直接的相连
    4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
    5.建立索引,在查询中使用索引 可以提高性能

    (四)使用索引的缺点

    1.在创建索引和维护索引 会耗费时间,随着数据量的增加而增加
    2.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
    3.当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。

    (五)使用索引需要注意的地方

    在建立索引的时候应该考虑索引应该建立在数据库表中的某些列上面 哪一些索引需要建立,哪一些所以是多余的.
    一般来说,
    1.在经常需要搜索的列上,可以加快索引的速度
    2.主键列上可以确保列的唯一性
    3.在表与表的而连接条件上加上索引,可以加快连接查询的速度
    4.在经常需要排序(order by),分组(group by)和的distinct 列上加索引 可以加快排序查询的时间, (单独order by 用不了索引,索引考虑加where 或加limit)
    5.在一些where 之后的 < <= > >= BETWEEN IN 以及某个情况下的like 建立字段的索引(B-TREE)

    6.like语句的 如果你对nickname字段建立了一个索引.当查询的时候的语句是 nickname lick ‘%ABC%’ 那么这个索引讲不会起到作用.而nickname lick ‘ABC%’ 那么将可以用到索引

    7.索引不会包含NULL列,如果列中包含NULL值都将不会被包含在索引中,复合索引中如果有一列含有NULL值那么这个组合索引都将失效,一般需要给默认值0或者 ’ '字符串

    8.使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索引的时候指定前缀长度 比如前10个字符 (前提是多数值是唯一的…)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作.

    9.不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描

    10.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快

    (六)什么情况下不创建索引

    1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.
    2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率
    3.定义为text和image和bit数据类型的列不应该增加索引,
    4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系。

    原文地址:https://www.cnblogs.com/chenshishuo/p/5030029.html

    展开全文
  • 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快 数据的检索速度,这也是创建...
  • oracle数据库建立索引

    2011-09-28 23:59:06
    oracle数据库中如何建立索引建立索引有什么优势,索引该如何使用
  • 主要介绍了pymongo为mongodb数据库添加索引的方法,涉及Python操作mongodb数据库的相关技巧,非常简单实用,需要的朋友可以参考下
  • 数据库建立索引怎么利用索引查询

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

    千次阅读 2018-04-26 13:23:49
    原文出处:原文出处数据库索引的优缺点为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这...
  • Mongodb的索引操作 1.为什么mongdb需要创建索引 ...测试:插入10万条数据到数据库中 插入数据: for(i=0;i<100000;i++){db.t1.insert({name:'test'+i,age:i})} 创建索引前: db.t1.find({name:'test10000'}) db.t1.
  • 首先明白为什么索引会增加速度,DB执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的...
  • 数据库创建索引的规则

    千次阅读 2018-07-29 00:12:50
    经常需要和其他表建立连接,连接字段应该创建索引; 经常出现where子句中的字段,应该创建索引数据库不适合创建索引的情况: 比较大的文本字段或者长度较长的字段,不适合创建索引; 频繁进行数据操作的...
  • 数据库索引的理解及适合建立索引的字段

    万次阅读 多人点赞 2018-03-06 13:17:43
    转载深入浅出数据库索引原理,哪些字段适合建立索引 问题 为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入、修改、删除变慢? 什么情况下要同时两个字段上建索引? 这些问题...
  • 数据库建立索引的原则

    千次阅读 2014-12-12 11:54:18
    铁律一:天下没有免费的午餐,使用索引是需要付出代价的。 索引的优点有目共睹,但是,却很少有人关心过采用...特别是在数据库设计的时候,数据库管理员为表中的哪些字段需要建立索引,要调研、要协调。如当建有索引的
  • 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. 全文索引(fulltext)3.7.... 已经存在的表上...
  • 用lucene对数据库建立索引及搜索.doc
  • 要建立几个字段建立索引怎么样建立, 建立好了如何使用 SQL语句又该怎写? ----------------------------------------------------------------------------------------------------------------------------------...
  • ORACLE数据库重建索引

    2013-09-29 11:06:27
    导致索引失效: 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。
  • 我连什么是索引都不是很清晰明了,你给我讲什么建立索引的时机?!!! 是的,很多同学只是有所耳闻,并且可能就是只知道索引可以优化sql效率,但是至于其所以然并不清晰。那么我们现在先谈谈什么是索引。 ...
  • 数据库索引

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

    万次阅读 2018-05-01 11:03:02
    我们先看看索引的定义:[关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...
  • 我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此对一大表建立索引的时候首先应当考虑的是空间容量问题。 其次,建立索引的时候要对表进行加锁,因此应当注意操作业务空闲的时候...
  • mysql数据库创建索引和使用

    千次阅读 2018-11-08 13:43:46
    1. 2 ...需要注意索引需要的不同数据库引擎 alter table user add fulltext(字段名); 创建语句: CREATE TABLE zy_article( art_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, typ...
  • 数据库创建索引的几种方法

    万次阅读 多人点赞 2018-11-09 10:46:26
    1、普通索引  CREATE INDEX indexName ON mytable(username(length));  创建表的时候直接指定:  CREATE TABLE mytable(  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,   INDEX [indexName] (.....
  • 如何达梦数据库中创建索引

    千次阅读 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); 该...
  • 为mysql数据库建立索引

    千次阅读 2016-01-13 16:18:35
    为mysql数据库建立索引 前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,...
  • 答:不一定 建立太多的索引将会影响更新和插入的...对于一个经常需要更新和插入 的表格,就没有必要为一个很少使用的 where 子句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。 ...
  • Oracle 建立索引及SQL优化 数据库索引: 索引有单列索引 复合索引之说 如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动相应的约束列上建议唯一索引。数据库索引主要进行提高访问速度。 建设原则...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 326,310
精华内容 130,524
关键字:

怎么在数据库建立索引