SQL Server 索引——的创建删除何时使用索引查询语句

Posted purple5252

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 索引——的创建删除何时使用索引查询语句相关的知识,希望对你有一定的参考价值。

1.SQL 创建索引

使用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) ;

2.删除索引

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

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

例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。

  如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为 ;

如果有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。

4.索引查询

SQL Server数据库索引信息查询

--sql server查看表中已存在的索引

exec sp_helpindex 表名

-- 查看某個表的索引

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);

以上是关于SQL Server 索引——的创建删除何时使用索引查询语句的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中如何理解逻辑顺序 物理顺序 索引顺序

SQL Server-聚焦强制索引查询条件和Columnstore Index

在 SQL Server 2017 上创建具有 800+ 百万行的现有分区表的列存储索引

索引视图何时更新?

SQL Server 索引最佳实践(SQL Server 2008)[关闭]

索引的优缺点,何时用或不用索引