目录:
一、MYSQL
二、Sqlserver
三、ORACLE
四、索引作用
前言:如果你阅读这篇文章只想找创建索引的语法,直接复制创建普通索引的语法即可。
如果你想了解并学习各类索引,可以结合推荐的链接进行学习
一、MYSQL
MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引。
1、MySQL创建普通索引,没有任何约束
CREATE INDEX 索引名 ON 表名(字段名)
例:
CREATE INDEX score_index ON maoyantop(score);
2、MySQL唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
CREATE UNIQUE INDEX 索引名 ON 表名(字段名)
3、MySQL主键索引
是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引
ALTER TABLE 表名 ADD PRIMARY KEY(字段名)
例:
ALTER TABLE AIS_MDXSJERI ADD PRIMARY KEY(DH,SJ)
4、MySQL组合索引
指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合
ALTER TABLE 表名 ADD INDEX 索引名 (字段1,字段2,字段3);
例:
ALTER TABLE AIS_MDXSJERI ADD INDEX_DHSJ(DH,SJ)
5、MySQL查看索引
SHOW INDEX FROM 表名
例:
SHOW INDEX FROM AIS_Cashier
mysql索引推荐文章一
mysql索引推荐文章二(点击蓝色字体可跳转到相应网页)
二、Sqlserver
Sqlserver索引分为聚簇索引、非聚簇索引(普通索引)、唯一索引、主键索引
CREATE [索引类型] INDEX 索引名称 ON 表名(列名)
1、Sqlserver非聚簇索引(普通索引)
非聚集索引就相当于使用字典的部首查找,非聚集索引是逻辑上的连续,物理存储并不连续
create nonclustered index 索引名 on 表名 (字段名);
例:
create nonclustered index index_sno on dbo.Student(Sno)
2、Sqlserver聚簇索引(主键索引)
一个表最多只能有一个聚簇索引。创建主键的时候会自动创建聚簇索引
create clustered index 索引名 on 表名 (字段);
例:
create clustered index index_DHSJ on AIS_MDXSJERI(MDLX);
3、Sqlserver唯一索引(UNIQUE)
唯一索引可以作为数据的一个合法验证手段,例如学生表的身份证号码字段,我们人为规定该字段不得重复,那么就使用唯一索引(唯一索引允许索引字段为空)
create unique index 索引名 on 表名(字段名);
例:
create unique index index_DHSJ on AIS_MDXSJERI(DHSJ);
4、Sqlserver删除索引
创建主键时自动创建的索引是不能删除的
Drop index 表名.索引名
例:
Drop index dbo.Sm_idx_SMDTV_1.dx_SMDTV_1__68487DD7;
4、Sqlserver查看指定表中的索引
Execute sp_helpindex @objname='TMAIN.T_BAS_ENTERLIST_PRO';
例:
Execute sp_helpindex @objname = 'dbo.Student'
sqlserver索引文章推荐一
sqlserver索引文章推荐二
三、ORACLE
ORACLE索引分为唯一索引、非唯一索引、主键索引
1、ORACLE非唯一索引(普通索引)
CREATE INDEX 索引名 on 表名(列名 DESC)
2、ORACLE唯一索引
CREATE unique INDEX 索引名 on 表名(列名 DESC)
例:
CREATE unique INDEX index_Sage on YWWATER.Student(Sage DESC)
3、ORACLE主键索引
ORACLE在创建主键得时候就会自动创建索引
alter table 表名 add constraint 主键名 primary key(字段)
例:
alter table YWWATER.Student add constraint index_Sno primary key(Sno)
4、ORACLE删除索引
删除表主键
ALTER TABLE 表明 DROP CONSTRAINT 主键名;
删除索引
drop index 索引名;
4、ORACLE查看表中索引
select * from user_ind_columns where table_name = upper('表名')
例:
关于ORACLE创建索引方面的文章找了很多,任然没找到满意文章,如果大家看见ORACLE索引方面的文章,麻烦推荐一下。
四、索引作用
索引主要目的是提高系统的性能,加快数据的查询速度与减少系统的响应时间 。
但是索引对于提高查询性能也不是万能的,也不是建立越多的索引就越好。
- 索引建少了,用 WHERE 子句找数据效率低,不利于查找数据。
- 索引建多了,不利于新增、修改和删除等操作,因为做这些操作时,除了要更新数据表本身,还要连带立即更新所有的相关索引,而且过多的索引也会浪费硬盘空间。
索引定义原则:
1、避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。
2、对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
3、在条件表达式中经常用到的、不同值较多的列上建立索引,在不同值少的列上不要建立索引。
4、在频繁进行排序或分组(即进行 GROUP BY 或 ORDER BY 操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。
5、在选择索引键时,尽可能采用小数据类型的列作为键以使每个索引页能容纳尽可能多的索引键和指针,通过这种方式,可使一个查询必需遍历的索引页面降低到最小,此外,尽可能的使用整数做为键值,因为整数的访问速度最快。