iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库优化工程师必看 第一部分(索引、视图)
  • 670
分享到

数据库优化工程师必看 第一部分(索引、视图)

2024-04-02 19:04:59 670人浏览 泡泡鱼
摘要

数据库优化工程师必看 第一部分(索引、视图)防伪码:勤劳一日,可得一夜安眠;勤劳一生,可得幸福长眠       在本章技术详解之前,先分享一个今天

数据库优化工程师必看 第一部分(索引、视图)

防伪码:勤劳一日,可得一夜安眠;勤劳一生,可得幸福长眠

       在本章技术详解之前,先分享一个今天晚上和一个做IT的学弟的沟通总结

我们从八点多聊到十点 ,他主要做linux高级运维,大部分时间还是做数据库的一些工作, 按理说还是我的小师弟 。哈哈。 他说, 刚毕业从一家外资高新技术企业跳糟到一家国企,工资涨了小2000,现在税后也是8500。 但是,他非常后悔。我说以前的公司该是多么强大,让你宁可每个月少挣好几千也想回到以前的公司, 他说老表,工资不是衡量一个人价值的唯一标准, 给你举例说明你就知道这个公司有多厉害了 ,这家公司叫青牛(北京)技术有限公司,主要做融合网络的 最重要的是大多数的员工,自主的要求无偿加班,回忆起我以前刚毕业在那家软件公司上班的情景,总之效率特别高,例如经理下达一个命令到技术部,要求中午下班之前完成,六七个部门的员工帮我一起完成,而我现在在xx国企,想做个备份,不知道秘钥号码,问经理、测试工程师、问遍了,哎, 等我知道了秘钥号,本来上午十点可以做完的事情。 结果,下午两点才刚刚开始 ,如果给我一次重新选择的机会,我一定选择拥有强大战斗力和文化底蕴的公司,我在青牛仿佛看到了未来的第二个阿里巴巴集团。我其实总结一下 就是:眼光决定格局 选择决定未来 用我恩师的话说:公司文化的力量很大程度上决定他能走多远飞多高!

   现在是凌晨0:54分,我们正式开始索引和视图的详解,希望就像博客昵称“一盏烛光“那样,去帮助更多的人解决实际问题,谢谢各位的支持。我将持续更新更多原创技术文档。

实验案例一:创建数据库并使用索引查询学生考试成绩(多种表格在T-SQL查询语句 第二部分 此处略)

select Student.StudentName,Subject.SubjectName,Result.ExamDate,Result.StudentResult

from Subject,Student,Result  with(INDEX=aaa)  注:INDEX=aaa,即索引=索引名

where Result.SubjectId=Subject.SubjectId and Result.StudentNo=Student.StudentNo and Result.StudentResult between 80 and 90

注:INDEX=aaa,即索引=索引名。虽然可以指定SQL Server按哪个索引进行数据查询,但一般不需要人工指定,sql Server将会根据所创建的索引,自动优化查询。其实,使用索引可加快数据检索速度,但为每个列都建立检索没有必要。因为检索自身也需要维护,并占用一定资源。

案例二:验证索引的作用

 

1、 首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。

数据库优化工程师必看 第一部分(索引、视图)

2、 向表中插入大量数据,数据越多,验证索引的效果越好。

使用语句完成:While 1>0  Insert into 学生表(姓名)  values(‘杨文’)

上面语句是一个死循环,除非强制结束,如果1大于0就会一直向表中插入姓名

如下图所示:

数据库优化工程师必看 第一部分(索引、视图)

3、等待5分钟左右,打开表的属性,查看表的行数1030550,当前为如下图所示:

数据库优化工程师必看 第一部分(索引、视图)

我们可以右击,选择前1000行,效果如下:

数据库优化工程师必看 第一部分(索引、视图)

4、使用语句查询第900000行的数据,Select * from 学生表 Where 学号=900000

数据库优化工程师必看 第一部分(索引、视图)

5、打开“sql server profiler ”工具进行跟踪,如下图所示:

打开“sql server profiler ”工具查看跟踪的信息,发现查询时间很长,cpu工作了359毫秒,reads:读了8630次,writes:写了9次,duration:总计花费649毫秒完成查询。

数据库优化工程师必看 第一部分(索引、视图)

6、为了下面分析文件更准确,多执行几次Select * from 学生表 Where 学号=900000

然后把跟踪的结果保存在桌面上:

数据库优化工程师必看 第一部分(索引、视图)

注:这里选择第一项 ,跟踪文件。然后保存至桌面,效果如下:

数据库优化工程师必看 第一部分(索引、视图)

7、 打开“数据库引擎优化顾问”,添加跟踪文件,进行分析,发现索引建议,需要建立索引。

数据库优化工程师必看 第一部分(索引、视图)

注意:选择benet数据库中的学生表,然后点击“开始分析”

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

索引类型为clusterd(聚集索引),索引列为“学号”。

8、 按照“数据库引擎优化顾问”的索引建议建立聚集索引,并且选择“唯一”

数据库优化工程师必看 第一部分(索引、视图)

9、 再次执行Select * from 学生表Where 学号=900000

10、 打开sql server profiler查看跟踪的时间,发现查询时间大幅提升,说明索引可以提高查询速度。

数据库优化工程师必看 第一部分(索引、视图)

发现总计时间为1毫秒,几乎忽略不计,以至于几乎不花时间立即查询

案例四:分别练习创建各种索引

首先我们先来了解一下索引的分类以及选择索引列的注意事项:

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

我们掌握了学术性的理论后,将进行详细的试验操作来进一步巩固:


1、 创建聚集索引

目前tstudent表中没有任何索引也没有主键

数据库优化工程师必看 第一部分(索引、视图)

为tstudent表创建聚集索引

数据库优化工程师必看 第一部分(索引、视图)

选中studentID,单击左上侧的主键按钮

数据库优化工程师必看 第一部分(索引、视图)

为Tstuden表的studentID创建主键就同时创建了聚集索引

数据库优化工程师必看 第一部分(索引、视图)

2、创建组合索引

为成绩表创建组合索引,因为一个学生不能为一门学科录入两次成绩,所以将成绩表中的studentID和subjectID创建组合索引

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

3、用命令创建聚集索引

创建一个表TS

create TABLE TS(

StudentID varchar(10)NOT NULL,

Sname varchar(10)DEFAULT NULL,

sex char(2)DEFAULT NULL,

cardID varchar(20)DEFAULT NULL,     注意:实际工作中建议从简从快,保证质量,这些语法可拓展练习

Birthday datetime DEFAULT NULL,

Email varchar(40)DEFAULT NULL,

Class varchar(20)DEFAULT NULL,

enterTime datetime DEFAULTNULL

)

Go

用命令创建聚集索引

create clustered index CL_studentID

on TS(studentID)

创建聚集索引不一定创建主键,如下图所示:

数据库优化工程师必看 第一部分(索引、视图)

4、创建唯一索引

创建唯一性约束的时候就会创建唯一性索引,不能有重复值

为Tstudent表创建唯一非聚集索引

create unique nonclustered index U_cardID on TStudent(cardID)

数据库优化工程师必看 第一部分(索引、视图)

5、创建非聚集索引---可以有重复值

为Tstudent表的姓名列创建非聚集索引

数据库优化工程师必看 第一部分(索引、视图)

使用命令查看表上的索引

Select * from sys.sysindexes where id=(select object_id from sys.all_objects where

name='Tstudent')

Indid中1代表聚集索引

Indid中2代表唯一非聚集索引

Indidz中3代表非聚集索引

数据库优化工程师必看 第一部分(索引、视图)

二、视图

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

数据库优化工程师必看 第一部分(索引、视图)

在这里,一些举例试验就不再一一演示了,因为,在我看来,作为一名数据库管理员,必须要掌握数据库优化这项技能。

最好掌握一些基本的通用语法,虽说视图是个变量,随时更新变化,用起来很方便简洁,可直接在其基础上直接

执行:

例如

select * from 视图名

where 条件=xxx

很方便,但是视图毕竟有局限性,在性能和修改限制方面有待提高。


您可能感兴趣的文档:

--结束END--

本文标题: 数据库优化工程师必看 第一部分(索引、视图)

本文链接: https://www.lsjlt.com/news/41744.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么显示表的字段
    如何显示 oracle 表的字段 在 Oracle 数据库中,可以使用 DESC 命令显示表的字段。 语法: DESC table_name 参数: table_name:要显示字段的表...
    99+
    2024-05-14
    oracle
  • oracle怎么看所有的表
    在 oracle 数据库中查看所有表的步骤:连接到数据库运行查询:select table_name from user_tables; 如何使用 Oracle 查看所有表 ...
    99+
    2024-05-14
    oracle
  • oracle怎么显示行数
    如何使用 oracle 显示行数 在 Oracle 数据库中,有两种主要方法可以显示行数: 1. 使用 COUNT 函数 SELECT COUNT(*) FROM table_n...
    99+
    2024-05-14
    oracle
  • oracle怎么显示百分比
    oracle中显示百分比的方法有:使用百分号“%”;使用to_char()函数;使用format()函数(oracle 18c及更高版本);创建自定义函数。 Oracle 显...
    99+
    2024-05-14
    oracle
  • oracle怎么删除列
    oracle 中删除列的方法有两种:1)使用 alter table table_name drop column column_name 语句;2)使用 drop colum...
    99+
    2024-05-14
    oracle
  • sql怎么查看表的索引
    通过查询系统表,可以获取表的索引信息,包括索引名称、是否唯一、索引类型、索引列和行数。常用系统表有:mysql 的 information_schema.statistics、postg...
    99+
    2024-05-14
    mysql oracle
  • sql怎么查看索引
    您可以使用 sql 通过以下方法查看索引:show indexes 语句:显示表中定义的索引列表及其信息。explain 语句:显示查询计划,其中包含用于执行查询的索引。informat...
    99+
    2024-05-14
  • sql怎么查看存储过程
    如何查看 sql 存储过程的源代码:使用 show create procedure 语句直接获取创建脚本。查询 information_schema.routines 表的 routi...
    99+
    2024-05-14
  • sql怎么查看视图表
    要查看视图表,可以使用以下步骤:使用 select 语句获取视图中的数据。使用 desc 语句查看视图的架构。使用 explain 语句分析视图的执行计划。使用 dbms 提供...
    99+
    2024-05-14
    oracle python
  • sql怎么查看创建的视图
    可以通过sql查询查看已创建的视图,具体步骤包括:连接到数据库并执行查询select * from information_schema.views;查询结果将显示视图的名称、...
    99+
    2024-05-14
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作