为表建立索引

聚合索引:有多个字段组成,一个表中只能有一个;

非聚合索引:有单个字段组成,一个表中可以有多个;

如TbStudent创建一个聚合索引:学号,班级 (1)

2个非聚合索引:学号 (2)

班级 (3)

对于查询:

select * from TbStudent where 学号=‘张三’ (1)不起作用,(2)作用;

select * from TbStudent where 学号=‘张三’ and 班级=‘4班’ (1)起作用;

对于聚合索引必须同时满足才起左右;满足单个不作用;

SQL语句:

--索引存在时先删除;WITH DROP时是 相同的索引名

CREATE NONCLUSTERED INDEX [IDX_XLID] ON [dbo].[XS_XL400_ZJ_YH] ([XLID]) WITH DROP_EXISTING ON [PRIMARY];

--首次创建

CREATE NONCLUSTERED INDEX [IDX_XLID] ON [dbo].[XS_XL400_ZJ_YH] ([XLID]) ON [PRIMARY];

---删除聚合索引,因为必须只有一个

alter table XS_XL400_ZJ_YH drop constraint PK_XS_XL400_ZJ_YH;

--普通索引 DROP INDEX XS_XL400_YH.PK_XS_XL400_YH;

--唯一索引 alter table XS_XL400_YH drop constraint PK_XS_XL400_YH

---创建新的聚合索引

CREATE CLUSTERED INDEX [IDX_XLIDDATE] ON [dbo].[XS_XL400_ZJ_YH] ([XLID],[calcdate]) ON [PRIMARY];

建立索引的原则:

1) 定义主键的数据列一定要建立索引。

2) 定义有外键的数据列一定要建立索引。

3) 对于经常查询的数据列最好建立索引。

4) 对于需要在指定范围内的快速或频繁查询的数据列;

5) 经常用在WHERE子句中的数据列。

6) 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

8) 对于定义为text、image和bit的数据类型的列不要建立索引。

9) 对于经常存取的列避免建立索引

9) 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。

10) 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。

时间: 2024-10-14 07:49:12

为表建立索引的相关文章

数据库、数据表建立索引的原则

数据库建立索引的原则 1,确定针对该表的操作是大量的查询操作还是大量的增删改操作. 2,尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引. 3,尝试建立复合索引来进一步提高系统性能.修改复合索引将消耗更长时间,同时,复合索引也占磁盘空间. 4,对于小型的表,建立索引可能会影响性能 5,应该避免对具有较少值的字段进行索引. 6,避免选择大型数据类型的列作为索引. 索引建立的原则 索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建

oracle表关联update和表建立索引

update A a set a.A2 = (select b.B2 from B b where b.B1=a.A1) where exists (select 1 from B where B.B1=a.A1) -- Create/Recreate indexes create index t_source_phase_01 on t_source_phase (lineid)  tablespace COMMON_CABLE  pctfree 10  initrans 2  maxtran

分析ORACLE什么时候建立索引

索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用.这就好像即使字典没有目录的话,用户仍然可以使用它一 样.可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典.数据库也是如此.若没有建立相关索引的话,则数据库在查询记录的 时候,不得不去查询整个表.

(转)Mysql哪些字段适合建立索引

工作中处理数据时,发现某个表的数据达到亿条,所以要为表建索引提高查询性能,以下两篇文章总结的很好,记录一下,以备后用. 数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: 5.索引应该建在选择性高的字段上: 6.索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引: 7.复合索引的建立需要进行仔细分析:尽量考

多表利用DIH批量导入数据并建立索引注意事项

如果希望同时对多个表进行全文检索,那我们该如何处理呢?利用DIH导入数据并建立索引时.schema.xml中配置了uniqueKey为id <uniqueKey>id</uniqueKey> 如果多表主键都为id的话索引会被覆盖 <!--deltaImportQuery和deltaQuery为增量导入时使用.--> <entity name="case" pk="id" query="SELECT id,title

表建立联合索引

表建立联合索引后,以两个字段为例,如果想查询速度快,where条件中要么带上两个字段,要么带上前面的,如果只有后面的不会变快. 实例:以下联合索引:itemid和clock 这个联合索引 如果where字段查clock的话 是不能走索引的, 所以查询会慢 . 要想查询变快的话,查itemid,或者两个一起查.

通过在Oracle子表外键上建立索引提高性能

根据我的经验,导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新).在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁: 1)如果更新了父表的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见),由于外键上没有索引,所以子表会被锁住. 2) 如果删除了父表中的一行,整个子表也会被锁住(由于外键上没有索引). 除了全表锁外,在以下情况下,未加索引的外键也可能带来问题: 1) 如果有ON DELETE CASCADE,而且没有对子表加索引:例如,

mysql 建立索引场合及索引使用

索引建立场合: ① where后边字段 适合建立索引 ② order by 排序字段适合建立索引 ③ 索引覆盖 即 所要查询的字段本身就是索引 直接在索引中查询数据. 例如 select name,age from man 其中name,age 本身具有索引. ④ 连表查询 (外键设置索引) 在生产活动中,一般不使用外键索引.而是使用普通索引代替外键索引. ⑤建立索引字段需要离散度较高字段,例如性别这种字段不适合建立索引,(建立也会用不上索引会走表扫描形式) 索引使用原则 ① 字段独立 sele

Oracle 建立索引及SQL优化

Oracle 建立索引及SQL优化 数据库索引: 索引有单列索引 复合索引之说 如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引.数据库索引主要进行提高访问速度. 建设原则: 1.索引应该经常建在Where 子句经常用到的列上.如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%.则应该考虑. 2.对于两表连接的字段,应该建立索引.如果经常在某表的一个字段进行Order By 则也经过进行索引. 3.不应该在小表上建设索引. 优缺点: