定义

图片.png

何为聚集索引/非聚集索引

正文内容本身就是一种按照一定规则排列的目录称为”聚集索引”
目录纯粹是目录,正文纯粹是正文的排序方式称为”非聚集索引”。

实验的源代码

  1. IF EXISTS(SELECT *FROM SYSINDEXES WHERE name='IX_Student_studentName')
  2. DROP INDEX Student.IX_Student_studentName
  3. GO
  4. CREATE CLUSTERED/NONCLUSTERED INDEX IX_Student_studentName
  5. ON Student(studentName)

创建索引

使用CREATE 语句创建索引

CREATE INDEX  index_name  ON  table_name(column_name,column_name) include(score)  ---普通索引

CREATE UNIQUE INDEX index_name ON table_name (column_name) ;---非空索引

CREATE PRIMARY KEY INDEX index_name ON table_name (column_name) ;---主键索引

使用ALTER TABLE语句创建索引
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;

删除索引

drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;

查询索引

获取某个表的所有索引

SELECT 索引名称=a.name
,表名=c.name
,索引字段名=d.name
,索引字段位置=d.colid
FROM sysindexes a
JOIN sysindexkeys b ON a.id=b.id AND a.indid=b.indid
JOIN sysobjects c ON b.id=c.id
JOIN syscolumns d ON b.id=d.id AND b.colid=d.colid
WHERE a.indid NOT IN(0,255)
AND c.name='tableName' --你的表名称
ORDER BY c.name,a.name,d.name ASC

01.当需要快速找出在某个列中有一特定值的行

例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。
  如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为 ;
如果有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。

02.索引查询

SQL Server数据库索引信息查询
— 查看某個表的索引
SELECT FROM sys.sysindexes
WHERE id=object_id(‘RelactionGraph’)

— 查看整個庫的索引
SELECT
FROM sys.sysindexes

— 查看所有庫的索引
IF object_id(‘tempdb..#’)IS NOT NULL
DROP TABLE #
SELECT INTO # FROM sys.sysindexes WHERE 1=2

INSERT INTO #
EXEC sys.sp_MSforeachdb @command1=’Select
from ?.sys.sysindexes’

SELECT * FROM #

Oracle数据库索引信息查询
oracle对于数据库中的表信息,存储在系统表中。查询已创建好的表索引,可通过相应的sql语句到相应的表中进行快捷的查询:

1. 根据表名,查询一张表的索引
select from user_indexes where table_name=upper(‘party_customer’);
2. 根据索引号,查询表索引字段
1 select
from user_ind_columns where index_name=(‘索引名’);
3.根据索引名,查询创建索引的语句
select dbms_metadata.get_ddl(‘INDEX’,’SQL100310102315181’) from dual ; —[‘用户名’]可省,默认为登录用户
PS:dbms_metadata.get_ddl还可以得到建表语句,如:
SELECT DBMS_METADATA.GET_DDL(‘TABLE’,’表名’, [‘用户名’]) FROM DUAL ; //取单个表的建表语句,[‘用户名’]可不输入,默认为登录用户
SELECT DBMS_METADATA.GET_DDL(‘TABLE’,u.table_name) FROM USER_TABLES u; //取用户下所有表的建表语句
当然,也可以用pl/sqldeveloper工具来查看相关的表的各种信息。

查询用户的索引
select index_name,table_name,tablespace_name,
index_type,uniqueness , status
from dba_indexes where owner=’TPSHDEV’;
查询用户的索引列
select index_name,table_name,column_name,
index_owner,table_owner
from dba_ind_columns
where table_owner=’TPSHDEV’;
查询Orcale数据库执行计划
EXPLAIN PLAN FOR
SELECT FROM PARTY_CUSTOMER WHERE ID = ‘000000003034’ ; —要解析的SQL脚本
SELECT
FROM TABLE(DBMS_XPLAN.DISPLAY);