精华内容
下载资源
问答
  • 在哪些字段上创建索引
    2021-09-16 00:22:26
    1. 表的主键,外键
    2. 针对数据量大,且查询比较频繁的表建立索引
    3. 针对常作为查询条件(where),排序(order by),分组(group by)操作的字段建立索引
    4. 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高
    5. 如果是字符串类型的字段,字段的长度较长,可以针对字符串的特点,建立前缀索引
    6. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以索引覆盖,避免回表,提高查询效率
    7. 要控制索引的数量,索引过多,维护索引结构的代价很大,会影响增删改的效率
    8. 经常与其他表进行连表查询,在连接字段上可以建立索引
    9. 索引应该建立在小字段上,对于大的文本字段不要建立索引
    10. 如果索引列不能存储null值,则在建表时加入not null约束。当优化器知道每列是否包含null值时,它可以更好地确定哪个索引最有效地用于查询。
    更多相关内容
  • 哪些字段适合建索引

    千次阅读 2020-07-31 17:57:36
    经常需要进行更新操作的属性 1、表的主键、外键必须有索引; 2、数据量超过300的表应该...6、索引应该建字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析;尽量考虑用单字.
    转自:https://blog.csdn.net/maliao1123/article/details/52431144/
    经常需要进行更新操作的属性
    
    1、表的主键、外键必须有索引;
    2、数据量超过300的表应该有索引;
    3、经常与其他表进行连接的表,在连接字段上应该建立索引;
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
    5、索引应该建在选择性高的字段上;
    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
    A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
    B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
    C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
    D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
    8、频繁进行数据操作的表,不要建立太多的索引;
    9、删除无用的索引,避免对执行计划造成负面影响;
    以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。
    展开全文
  • 3、分组字段或者排序字段应该创建索引;4、选择性高的字段上应该建立索引。1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值...

    mysql需要加索引的字段:1、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;2、经常与其他表进行连接的表,在连接字段上应该建立索引;3、分组字段或者排序字段应该创建索引;4、选择性高的字段上应该建立索引。

    1b45766d81f7ae1f51b772c8b921d35f.png

    1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。MySQL 在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约束的同时, MySQL 自动创建主索引( primary index ),且索引名称为 Primary;数据库用户创建唯一性索引时, MySQL 自动创建唯一性索引( unique index ),默认情况下,索引名为唯一性索引的字段名。

    2、占用存储空间少的字段更适合选作索引的关键字。例如,与字符串相比,整数字段占用的存储空间较少,因此,较为适合选作索引关键字。

    3、存储空间固定的字段更适合选作索引的关键字。与 text 类型的字段相比, char 类型的字段较为适合选作索引关键字。

    4、Where 子句中经常使用的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。

    5、更新频繁的字段不适合创建索引,不会出现在 where 子句中的字段不应该创建索引。

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

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

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

    展开全文
  • Mysql哪些字段适合建立索引

    万次阅读 2020-06-26 21:34:19
    6、索引应该建字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: A、正确选择复合索引中的主列字段,一般是选择性较好的字段; B 、复合...

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

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

    • A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
    • B 、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
    • C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
    • D、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

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

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

    2、对千万级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

    添加索引示例:

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

    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会受影响:
    SQL> create table test (id number, name varchar2(20));
     
    Table created.
    

    然后重新开一个session:

    SQL> insert into test values (1,'lms');
     
    1 row created.
     
    <no commit>
     
    SQL> create index t1 on test(id);
    create index t1 on test(id)
    *
    ERROR at line 1:
    ORA-00054: resource busy and acquire with NOWAIT specified
    
    1. 加online这个参数,这个参数加上以后,除了create过程中index 保持online状态,Oracle还会在create index之前等待所有DML操作结束,然后得到DDL锁,开始create.
    SQL> create index t1 on test(id) online;
    <hold before commit>
    <after commit>
     
    SQL> commit;
     
    Commit complete.
     
    Index altered.
    

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

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

    展开全文
  • 【数据库】mysql哪些字段适合加索引

    千次阅读 2021-02-03 15:36:07
    数据库中字段适合添加索引的有表中某个字段值离散度越高越适合,占用存储空间少的字段,存储空间固定的字段,where子句中经常用到的字段等1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。...
  • 1、表的主键、外键必须有索引;...6、索引应该建字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: A、正确选择复合索引中的主列字...
  • mysql 一般在哪些字段建立索引

    千次阅读 2019-10-05 12:30:02
    这篇文章开始之前,我们需要注意一下,并不是索引越多越好,索引是一种以空间换取时间的方式,所以建立索引是要消耗一定的空间的,况且...4.经常与其他表进行连接的表的字段,应该字段上建立索引 5,经常出现...
  • 2.关联字段需要建立索引 3.排序字段可以建立索引 4.分组字段可以建立索引(因为分组前提是排序) 5.统计字段可以建立索引(如.count(),max()) 二、不适合建索引的情况: 1.频繁更新的字段不适合建立索引 2....
  • 如何DATETIME字段的日期部分创建索引?mysql> SHOW COLUMNS FROM transactionlist;+-------------------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key |...
  • 1、表的主键、外键必须有索引; 2、数据量超过300的表应该有... 6、索引应该建字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: A...
  • 创建学生表和课程表 #创建学生表 CREATE TABLE `student_info`( `id` INT(11) NOT NULL AUTO_INCREMENT, `student_id` INT NOT NULL, `name` VARCHAR(20) DEFAULT NULL, `course_id` INT NOT NULL, `class_id` INT...
  • 外键关系建立索引查询中排序字段,排序字段需要建立索引(大大提高排序的速度)频繁更新字段不适合创建索引where条件里用不到的字段创建索引创建单键/组合索引的选择问题。高并发下倾向于创建组合索引统计或分组...
  • 从MySQL 8.0.17开始, InnoDB支持创建多值索引(Multi-Valued Indexes),该索引JSON存储值数组的列定义的二级索引,对于单个数据记录可以有多个索引记录。跟普通索引一样,也可以`EXPLAIN`中查看到。
  • 如果不给它创建索引,则MySQL就会进行全局扫描,非常耗时。那么,类似邮箱地址这样的字符串,我们应该如何给它创建索引呢?这里简单介绍几种方法。 几种方法 比如我们有一张表user_info,存储了自增主键ID、邮箱地址...
  • 数据库的哪些字段适合添加索引

    万次阅读 2018-03-18 14:14:31
    接着一篇博文,谈一谈数据库中哪一些字段适合添加索引。1. 表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。MySQL ...
  • sql 表中同一个字段已经创建了单字段索引还能在字段创建组合索引吗?
  • mysql创建索引的时候指定索引长度  大部分的索引前面一部分的长度就能够有很好的区分度了。 通过减小索引长度,这样能够减小索引文件的大小,能够加快数据的insert。 CREATE INDEX index_name ON table_name ...
  • 哪些字段适合建立索引?

    千次阅读 2016-07-17 15:49:40
    哪些字段适合建立索引? 正确答案: B C D 你的答案: A B C (错误) select子句中的字段 外键字段 主键字段 where子句中的字段 添加笔记 求解答(10) 收藏 纠错
  • MySQL有哪些索引,及如何创建索引

    千次阅读 2020-09-11 19:15:17
    MySQL索引有哪些,及如何创建索引? 1.了解索引 1、索引是什么?  MySQL中,索引是一种增强式的存在,这表示即使没有索引,MySQL的功能并不会受到影响。索引是对数据库表中一列或多列的值进行排序的一种结构(B树)...
  • 实际,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们...
  • 已经存在的表上创建索引

    千次阅读 2021-02-03 20:03:22
    已经存在的表中,可以直接为表的一个或几个字段创建索引。基本形式如下:CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名ON表名(属性名[(长度)][ASC|DESC]);其中,UNIQUE是可选参数,表示索引为唯一性索引;...
  • 为数据库表中 某个字段增加索引

    千次阅读 2021-01-19 15:17:41
    按照创建时间查询数据,创建时间非索引 ,现在要优化一下 因此要为student_recode 表中的created_time增加索引MySQL如何为字段添加索引1.添加主键索引(PRIMARY KEY)ALTER TABLE `table_name` ADDPRIMARY KEY ( `...
  • Oracle 创建索引,oracle索引怎么创建

    千次阅读 2021-05-08 01:58:43
    Oracle 创建索引,oracle索引怎么创建索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索时候,数据库会自动使用...自动创建索引:创建主键约束,唯一键约束,主键约束时会自动创建索引2.手动创...
  • 查询字段是否存在 查询course表中,存在lectures_count字段的记录信息 db.course.find( { “lectures.lectures_count”: { $exists: true } } ) 参数:ture或者false 使用update命令,删除单一字段 update命令 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 445,366
精华内容 178,146
关键字:

在哪些字段上创建索引