当前位置: 首页 > news >正文

SQL 中: 索引的建立和删除

目录

  • 实验过程
  • 创建索引
  • 修改索引
  • 删除索引
  • 查询索引
  • 查看索引信息
  • 分析索引
  • 待续、更新中

实验过程

1 在STUDENT表的sno列上创建一个非聚簇索引,索引名为“student_sno_idx”。

CREATE INDEX student_sno_idx 
ON STUDENT (sno);

2.在STUDENT表上按sno的升序,sname的降序创建一个复合索引,索引名为“student_sno_sname_idx”。

Create clustered index   student_sno_sname_idx
on STUDENT (sno  ASC,sname DESC )

3.把STUDENT表上的索引student_sno_sname_idx更名为“IX_sno_sname”。

EXEC sp_rename 'student.student_sno_sname_idx', 'IX_sno_sname', 'INDEX';
-- sql server的重命名命令

4.在COURSE表的cno列上创建唯一聚簇索引,索引名为“course_cno_idx”。

-- 手动删除主键聚集索引
CREATE UNIQUE CLUSTERED INDEX course_cno_idx 
ON COURSE(cno);

5.使用存储过程sp_helpindex查看STUDENT表中的索引信息。
EXEC sp_helpindex ‘STUDENT’;

6.删除STUDENT表中的索引IX_sname。

7.使用存储过程sp_rename将索引student_sno_idx改名为“student_sno”。

use suoyin

EXEC sp_rename 'student.student_sno_idx', 'student_sno', 'INDEX';

六、分析索引
1.指明引用索引
SELECT 目标列表达式 FROM 表名 WITH (INDEX (索引名)) WHERE 查询条件
这个 SQL 命令语法用于指定在查询过程中使用特定的索引。
索引名:要在查询中使用的索引的名称。
WITH (INDEX (索引名)) : 用来指定在执行查询时使用特定的索引。这可以用于强制查询优化器使用特定的索引,而不是根据统计信息和查询条件自行选择索引。
使用这个语法时,需要确保指定的索引名是存在的. 在某些情况下,强制使用特定的索引可能会提高查询性能,但在其他情况下可能会降低性能。因此,在使用这个语法时,需要谨慎评估是否真正需要强制使用特定的索引。

如:
select sage
from student
with(index (IX_sage))
where sage>18;

2.使用SHOWPLAN_ALL分析索引
设置是否显示查询计划的命令为:
SET SHOWPLAN_ALL ON|OFF

SET SHOWPLAN_TEXT ON|OFF
必须要有相应的权限

SET SHOWPLAN_ALL ON|OFF命令 与SET SHOWPLAN_TEXT ON|OFF命令 ,是返回有关语句执行情况的详细信息,并估计语句对资源的需求。
而错误提示:
SET SHOWPLAN 语句必须是批处理中仅有的语句。

解决:

加三个go ,批处理开头以go开始
go
SET showplan_all on

go
SELECT * 
FROM student 

go
SET showplan_all  OFF

8.使用IX_sno_sname查询名叫“刘云云”的学生的信息。

select * 
from student 
with (index(IX_sno_sname))
where sname ='刘云云'

9.如果不使用索引IX_sno_sname,此次查询如何完成?

select * 
from student 
where sname ='刘云云'

创建索引

语法:

CREATE [UNIQUE]  [CLUSTERED | NONCLUSTERED]   INDEX  <索引名> 
ON <表名>  (<列名> [ASC|DESC]  [,…n] )

例如:
在STUDENT表上按sno的升序,sname的降序创建一个复合索引,索引名为“student_sno_sname_idx

Create  index    student_sno_sname_idx
on STUDENT (sno  ASC,cno DESC )
-- CLUSTERED:可选,表示指定创建的索引为聚集索引
-- NONCLUSTERED:可选,表示指定创建的索引为非聚集索引

作用:

不必全盘扫描全部表内容
类似指针,书页目录

创建索引条件(经验)

创建查询的l列:
主码/外码/经常使用的列

创建索引后会有索引码 / 指针,也会占用物理磁盘空间,需要合理创建索引

分类:
聚簇索引

创建该索引后, 表中数据行的物理存储顺序与索引顺序完全相同,  表中有主码时会自动创建聚簇索引

只能有一个主码,一个聚簇索引

非聚簇索引

不改变表中数据行的物理存储顺序,即表中的数据行不按索引码的次序存储。在非聚簇索引中,每个索引都有指针指向包含该键值的数据行

聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个

DBMS向导创建索引
在这里插入图片描述

在这里插入图片描述
命令创建索引

  1. 在COURSE表的cno列上创建唯一聚簇索引,索引名为“course_cno_idx”

CREATE UNIQUE CLUSTERED INDEX course_cno_idx 
ON COURSE(cno);
-- 必须先删除自动为主键创建的聚集索引, 且也要删除与之关联的外键表的约束

修改索引

例如:

-- sql server的重命名索引命令
--语法
-- EXEC sp_rename 'table_name.old_index_name', 'new_index_name', 'INDEX';

EXEC sp_rename 'student.student_sno_sname_idx', 'IX_sno_sname', 'INDEX';

--oracle 
ALTER INDEX old_index_name
 RENAME TO new_index_name;

删除索引

例如:
删除STUDENT表中的索引IX_sname

DROP INDEX IX_sname
ON student ;

查询索引

查询过程中使用特定的索引
语法:
SELECT 目标列表达式
FROM 表名
WITH (INDEX (索引名))
WHERE 查询条件;

WITH (INDEX (索引名)) : 用来指定在执行查询时使用特定的索引。

例如:


select sage
from student
with(index (IX_sage))
where sage>18;

结果:

在这里插入图片描述

查看索引信息

EXEC sp_helpindex 'STUDENT';

在这里插入图片描述

分析索引

SHOWPLAN_ALL 分析索引

设置是否显示查询计划的命令为:
SET SHOWPLAN_ALL ON|OFF
或
SET SHOWPLAN_TEXT ON|OFF

如何才能检测查询使用了哪个索引呢?SQL Server提供了多种分析索引和查询性能的方法,其中最常用的是SHOWPLAN_ALL方法。
显示查询计划就是SQL Server将显示在执行查询的过程中连接表时采取的每个步骤,以及是否选择及选择了哪个索引,从而帮助我们分析有哪些索引被系统采用。
通过在查询语句中设置SHOWPLAN_ALL选项,可以选择是否让SQL Server显示查询计划。

待续、更新中

 
 
—————————————————————
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.

相关文章:

  • 科技云报道:阿里云降价,京东云跟进,谁能打赢云计算价格战?
  • python中的错误和异常
  • git push 跟 git push origin master的区别
  • huggingface快速下载
  • 数据库-第八/九章 数据库编程和优化【期末复习|考研复习】
  • MySQL 学习笔记(基础篇 Day3)
  • qt练习案例
  • Visual studio编译器报1个无法解析的外部命令
  • Linux下阻塞IO驱动实验实例二
  • 软考网络工程师 第五章 第一节 移动通信与5G
  • 每日一练:LeeCode-35、搜索插入位置【数组】、面试题 01.08. 零矩阵【数组】、面试题 01.07. 旋转矩阵【数组+行列翻转】
  • 【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
  • 5分钟,我把网站性能优化了3倍
  • C++程序设计-第六/七/八章 运算符重载/包含与继承/虚函数和多态性【期末复习|考研复习】
  • 【AI视野·今日NLP 自然语言处理论文速览 第八十三期】Wed, 6 Mar 2024
  • 大语言模型中,role为user、assistant、system有什么区别
  • Django工具
  • 微信小程序如何实现下拉刷新
  • 备战蓝桥杯---动态规划的一些思想2
  • Rust 语言中的泛型
  • 华为招聘:未与任何第三方开展过任何形式的实习合作
  • AMD:预计美国芯片出口管制将对全年营收造成15亿美元损失
  • 央行、证监会:科技创新债券含公司债券、企业债券、非金融企业债务融资工具等
  • 巴基斯坦宣布关闭全国空域48小时
  • 白俄罗斯政府代表团将访问朝鲜
  • 央视热评:从银幕到生活,好故事如何“撬动”大市场