精华内容
下载资源
问答
  • 更多相关内容
  • 适合建立索引字段

    千次阅读 2017-12-26 16:36:53
    5、索引应该建在选择性高的字段上(枚举型字段不索引);6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引建立需要进行仔细分析;尽量考虑用单字段索引代替:A、正确选择复合...

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

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

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

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

    5、索引应该建在选择性高的字段上(枚举型字段不建索引);

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

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

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

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

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

    D、假如复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

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

    8、频繁进行数据操作的表,不要建立太多的索引;

    9、删除无用的索引,避免对执行计划造成负面影响;

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

    万次阅读 2020-06-26 21:34:19
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...

    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。

    展开全文
  • 4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...

    数据库设计中,哪些字段适合建立索引?

    1. 表的主键必须有索引;
    2. 数据量超过300的表应该有索引;
    3. 经常与其他表进行连接的表,在连接字段上应该建立索引;
    4. 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
    5. 索引应该建在选择性高的字段上;
    6. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    复合索引的建立需要进行仔细分析:

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

    Mysql如何为表字段添加索引?

    1.添加PRIMARY KEY(主键索引):

    ALTER TABLE table_name ADD PRIMARY KEY ( column )

    2.添加UNIQUE(唯一索引) :

    ALTER TABLE table_name ADD UNIQUE ( column )

    3.添加INDEX(普通索引) :
    ALTER TABLE table_name ADD INDEX index_name ( column )

    4.添加FULLTEXT(全文索引) :
    ALTER TABLE table_name ADD FULLTEXT ( column)

    5.添加多列索引:
    ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

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

    千次阅读 2020-07-31 17:57:36
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...
  • 那些字段不适合索引

    千次阅读 2018-09-11 16:03:52
     4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行...
  • 为什么说性别字段不适合索引

    千次阅读 2021-02-11 03:29:33
    关于区分度不高的字段,比如性别,比如状态字段,是否应该建...所以说,唯一性太差的字段不需要创建索引,即便用于where条件.相关,建立联合索引时,也要考虑把重复率低而又用得多的列放在前面.比如: key (attr_id, att...
  • 哪些字段适合建立索引

    千次阅读 2018-07-26 23:17:40
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...
  • 理论文章会告诉你值重复率高的字段不适合索引。不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢! 一个表可能会...
  • 对数据库索引的理解及适合建立索引字段

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

    千次阅读 2021-02-03 15:36:07
    数据库中字段适合添加索引的有表中某个字段值离散度越高越适合,占用存储空间少的字段,存储空间固定的字段,where子句中经常用到的字段等1、表的某个字段值得离散度越高,该字段适合选作索引的关键字。...
  • 4.频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件; 5.where条件里用不到的字段,不创建索引; 6.高并发的情况下一般选择复合索引; 7.查询中排序的字段创建索引将...
  • 那些字段不适合索引

    千次阅读 2021-02-02 14:36:59
    经常与其他表进行连接的表,在连接字段上应该建立索引;经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;索引应该建在选择性高的字段上;索引应该建在小字段上,对于大的文本字段甚至超长字段,不要...
  • 一、适合建索引的情况: ...2.where条件中用不到的字段不适合建立索引 3.可以确定表数据比较少不需要建立索引 4.数据重复且发布比较均匀的字段不适合建索引(如性别,真假值) 5.参与列计算的列不适合建索引 ...
  • 理论文章会告诉你值重复率高的字段不适合索引。不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢! 一个表可能会...
  • 为什么性别字段不适合索引

    千次阅读 2020-11-09 11:25:05
    所以在性别这种辨别度较低的字段建立索引,索引树可能只有两个节点,跟线性查找没有太大区别,并且因为回表的存在导致在聚集索引树和非聚集索引树来回切换反而导致查询时间更慢。并且维护该索引还要一定的开销。...
  • 时间字段是否适合建立索引

    万次阅读 2017-11-22 11:56:13
    可以建立索引的;至于建立聚集索引或者是非聚集索引,那要看你这个时间字段的具体情况以及使用或变更频繁程度。 一般来说,适合建立聚集索引的要求:“既能绝大多数都相同,又能只有极少数相同”的规则。 先...
  • 4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行...
  • MySQL给表里的某个字段建立索引

    千次阅读 2019-04-15 15:29:41
    注:`table_name` 和 `column` 中的``是Esc下方的一个键 ~`,可省略写``,直接写表名和字段名 1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引)...
  • 哪些字段适合建立索引?

    千次阅读 2016-07-17 15:49:40
    哪些字段适合建立索引? 正确答案: B C D 你的答案: A B C (错误) 在select子句中的字段 外键字段 主键字段 在where子句中的字段 添加笔记 求解答(10) 收藏 纠错
  • 3>什么情况下不适合建立索引?  1.对于在查询过程中很少使用或参考的列,不应该创建索引。  2.对于那些只有很少数据值的列,不应该创建索引。  3.对于那些定义为image,text和bit数据类型的列,不应该创建索引...
  • 性别字段建立索引问题

    万次阅读 2018-09-25 18:32:35
    什么字段适合建索引,什么字段不适合建索引。 性别字段可以建索引吗? 我回答得不是很好。 性别字段这种重复性很强的字段,不要建立索引。为什么不能呢? 下面建立表测试下。如:我建了个tb_test表,往里面插入...
  • 建立索引的优缺点:为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快 数据的检索速度,这也是创建索引的最...
  • mysql 一般在哪些字段建立索引

    千次阅读 2019-10-05 12:30:02
    在这篇文章开始之前,我们需要注意一下,并是索引越多越好,索引是一种以空间换取时间的方式,所以建立索引是要消耗一定的空间的,况且在索引的维护上也会消耗资源。 数据库建立索引的常用规则如下: 1.表的主键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 277,387
精华内容 110,954
关键字:

不适合建立索引的字段