[数据库实验心得]数据库实验心得

心得体会范文 2023-02-12 网络整理 晴天

【fanwen.jxxyjl.com--心得体会范文】

  我在sql server 索引基础知识系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。

  对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个操作。 这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。

  区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 kb)。这意味着 sql server 数据库中每 mb 有 16 个区。

  为了使空间分配更有效,sql server 不会将所有区分配给包含少量数据的表。sql server 有两种类型的区:

  统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。

  混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。

  通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。

  为何会这样呢?

  其实很简单:

  读或写 8kb 的时间与读或写 64 kb的时间几乎相同。

  在 8 kb 到 64 kb 范围之内,单个磁盘 i/o 传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。

  因此,从数学上来讲,当需要传输 64 kb 以上的 sql 数据时,

  尽可能地执行 64 kb 磁盘传输是有益的,即分成数个64k的操作。

  因为 64 kb 传输基本上与 8 kb 传输一样快,而每次传输的 sql server 数据是 8 kb 传输的 8 倍。

  我们通过一个实例来看 有and 操作符时候的最常见的一种情况。我们有下面一个表,

  create table [dbo].[member]( [member_no] [dbo].[numeric_id] identity(1,1) not null, [lastname] [dbo].[shortstring] not null, [firstname] [dbo].[shortstring] not null, [middleinitial] [dbo].[letter] null, [street] [dbo].[shortstring] not null, [city] [dbo].[shortstring] not null, [state_prov] [dbo].[statecode] not null, [country] [dbo].[countrycode] not null, [mail_code] [dbo].[mailcode] not null, [phone_no] [dbo].[phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default (getdate()), [expr_dt] [datetime] not null default (dateadd(year,1,getdate())), [region_no] [dbo].[numeric_id] not null, [corp_no] [dbo].[numeric_id] null, [prev_balance] [money] null default (0), [curr_balance] [money] null default (0), [member_code] [dbo].[status_code] not null default (" "))

  这个表具备下面的四个索引:

  索引名 细节 索引的列

  member_corporation_link nonclustered located on primary corp_no

  member_ident clustered, unique, primary key located on primary member_no

  member_region_link nonclustered located on primary region_no

  memberfirstname nonclustered located on primary firstname

  当我们执行下面的sql查询时候,

  select m.member_no, m.firstname, m.region_nofrom dbo.member as mwhere m.firstname like "k%" and m.region_no > 6 and m.member_no < 5000go123

  sql server 会根据索引方式,优化成下面方式来执行。

  select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as m where m.firstname like "k%" and m.member_no < 5000) a , -- 这个查询可以直接使用 memberfirstname 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 3 次

  (select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6) b

  -- 这个查询可以直接使用 member_region_link 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 10 次

  where a.member_no = b.member_no

  不信,你可以看这两个sql 的执行计划,以及逻辑读信息,都是一样的。

  其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sql server 不会优化成下面的方式。是因为 and 操作符优化的另外一个原则。

  1/26 的数据和 1/6 的数据找交集的速度要比 1/52 的数据和 1/3 的数据找交集速度要慢。

  select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as mwhere m.firstname like "k%" -- 1/26 数据) a,

  (select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6 and m.member_no < 5000-- 1/3 * 1/ 2 数据) bwhere a.member_no = b.member_no

  当然,我们要学习sql 如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。

  比如下面的查询语句

  select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (0))where m.firstname like "k%" and m.region_no > 6 and m.member_no < 5000go

  select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (1))where m.firstname like "k%" and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (membercovering3))where m.firstname like "k%" and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (memberfirstname, member_region_link))where m.firstname like "k%" and m.region_no > 6 and m.member_no < 5000go

  这里 index 计算符可以是 0 ,1, 指定的一个或者多个索引名字。对于 0 ,1 的意义如下:

  如果存在聚集索引,则 index(0) 强制执行聚集索引扫描,index(1) 强制执行聚集索引扫描或查找(使用性能最高的一种)。

  如果不存在聚集索引,则 index(0) 强制执行表扫描,index(1) 被解释为错误。

  总结知识点:

  简单来说,我们可以这么理解:sql server 对于每一条查询语句。会根据实际索引情况(sysindexes 系统表中存储这些信息),分析每种组合可能的成本。然后选择它认为成本最小的一种。作为它实际执行的计划。

  成本代价计算的一个主要组成部分是逻辑i/o的数量,特别是对于单表的查询。

  and 操作要满足所有条件,这样,经常会要求对几个数据集作交集。数据集越小,数据集的交集计算越节省成本。 123

  的项目中,竟然出现了滥用聚集索引的问题。看来没有培训最最基础的索引的意义,代价,使用场景,是一个非常大的失误。这篇博客就是从这个角度来罗列索引的基础知识。

  使用索引的意义

  索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。

  使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。

  使用索引的代价

  索引需要占用数据表以外的物理存储空间。

  创建索引和维护索引要花费一定的时间。

  当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。

  创建索引的列

  主键

  外键或在表联接操作中经常用到的列

  在经常查询的字段上最好建立索引

  不创建索引的列

  很少在查询中被引用

  包含较少的惟一值

  定义为 text、ntext 或者 image 数据类型的列

  heaps是staging data的很好选择,当它没有任何index时

  excellent for high performance data loading (parallel bulk load and parallel index creation after load)

  excellent as a partition to a partitioned view or a partitioned table

  聚集索引提高性能的方法,在前面几篇博客中分别提到过,下面只是一个简单的大纲,细节请参看前面几篇博客。

  何时创建聚集索引?

  clustered index会提高大多数table的性能,尤其是当它满足以下条件时:

  独特, 狭窄, 静止: 最重要的条件

  持续增长的,最好是只向上增加。例如:

  identity

  date, identity

  guid (only when using newsequentialid() function)

  聚集索引唯一性(独特型的问题)

  由于聚集索引的b+树结构的叶子节点必须指向具体数据。如果你要建立聚集索引的列不唯一,并且你指定的创建的聚集索引是非唯一的聚集索引,则会有以下情况:

  如果未使用 unique 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

123

本文来源:https://fanwen.jxxyjl.com/xindetihuifanwen/174228.html

  • 财政干部个人工作总结|财政局长个人工作总结

    胡**同志现任财政局党组书记、局长。一年来,面对全市十分困难的财政形势,胡**同志积极履行当家理财职责,在德能勤绩廉方面从严从高要求自己,团结带领局党组一班人,千方百计克服各种困难,锐意改革,开拓创新,圆满地完成了年初确定的财税工作各项任务,确保了财政收支平衡。特别是在深化财政改革、强化财政监督...

    发布于:2023-07-22

    详细阅读
  • 局长党性分析材料(2020年)_农业局长的党性分析材料

    分析评议是保持共产党员先进性教育活动中承上启下的重要阶段,是巩固和扩大学习动员阶段成果,打牢整改提高工作基础,确保先进性教育活动取得实效的关键。我认为只有深入解剖自己,才能正确认识自己;只有不断改进自己,才能不断提高自己。 一 存在的主要问题 本人于xxxx年x月参加工作,xxxx年x月入党,...

    发布于:2023-07-22

    详细阅读
  • [国网公司职员分几级]公司职员党性分析材料

    自开展保持共产党员先进性教育活动以来,我积极主动地参加机关党支部的集中学习,并坚持以自学为主,使自己在思想上有了很大收获,从脑海中进一步加深了对“三个代表”重要思想的理解,使自己充分认识到先进性教育活动的重大历史意义和现实意义。  我是一名新党员,在公司从事驾驶工作多年了,在这次先进性教育...

    发布于:2023-07-22

    详细阅读
  • 开展先进性教育活动的总体安排是第一阶段_保持共产党员先进性教育活动第一阶段总结

    在全党开展的实践“三个代表”重要思想为主要内容的保持共产党员先进性教育活动,是进一步加强党的执政能力建设,全面推进党的建设新的伟大工程的一项重大举措。自活动开展以来,我能自觉提高思想认识,积极投身到教育活动中去。得到了一次及时的党性锻炼,理想信念进一步加强,宗旨意识进一步明确。(一)作为一名普通...

    发布于:2023-07-22

    详细阅读
  • [党员六稳六保心得体会]党员保先心得体会(五十一)

    党的先进性关系到党的执政地,而中国共产党是由千千万万个党员组成的,党的路线方针政策要靠这千千万万个党员去执行,党的主张要靠这千千万万个党员去实施,每一个党员的素质关系着党的整体素质,每一个党员的言行影响着党的整体形象,我们的党能不能保持先进性、有无吸引力、凝聚力、能不能稳固执政地位,就看能否充分...

    发布于:2023-07-22

    详细阅读
  • 【重庆财政官网】财政干部驻重庆斯沃特实业有限公司挂职工作汇报

    2004年3月根据县委组织部的安排,我入驻重庆斯沃特实业有限公司挂职煅炼,得到一个难得的学习机会。本着“树好我县干部的良好形象;全心全意为企业服务;学习积累实践经验,为铜梁经济发展服务。”的原则,我以最高的热情,最快速度熟悉了斯沃特公司的情况,以主人翁的角度为公司提出合理化建议,并以一个全职员工...

    发布于:2023-07-22

    详细阅读
  • 保持沉默_保持共产党性先进性个人党性分析(普通党员)

    开展保持共产党员先进性教育活动以来,我认真系统地学习了先进性教育有关读本,观看了防腐录像和先进典型纪录片,到革命老区重温了革命精神,以普通党员的身份参加了支部学习讨论活动。进入分析评议阶段以来,我对自己近年来的工作进行了全面回顾和认真反思,仔细查摆了思想、工作、作风方面存在的问题。采取谈心、召开...

    发布于:2023-07-22

    详细阅读
  • 党员六稳六保心得体会_党员保先心得体会(五十二)

    党的先进性是党的生命线;是党的建设的根基。党的十六届四中全会《决定》强调,要积极 探索党员教育、管理、监督的新机制,加强流动党员教育管理,促进党员发挥先锋模范作用 ,处处显示一个共产党员的先进性,从而提高党的执政能力,巩固党的建设新的伟大工程的 基础工程。因此,加强农村党员教育,增强基层组织的凝...

    发布于:2023-07-22

    详细阅读
  • 教育评议先进性评价_先进性教育分析评议阶段(第二阶段)总结

    先进性教育分析评议阶段(第二阶段)总结  我党支部从3月22日开始进入分析评议阶段。在第二阶段中,党组、支部重点把握住层层征求意见、广泛开展交心谈心,查找存在问题,自我党性分析,撰写党性分析材料等主要环节,走好分析评议阶段每一步。认真做好分析评议阶段的工作,是巩固和扩大学习动员阶段成果,打牢整改...

    发布于:2023-07-22

    详细阅读
  • 先进性教育是哪年_先进性教育学习阶段学习体会

    通过一段时间的共产党员先进性学习活动,学习了先进性教育读本和中央、市几位领导的讲话精神,参加了部里的各次学习讨论,聆听了区委陈策书记上的党课,对部支部提出的党员先进性学习讨论题进行了深刻思考,使我对共产党员先进性的重要意义有了清醒的认识,对共产党员先进性的要求有了更深的理解。  一、从信念入手,...

    发布于:2023-07-21

    详细阅读

Copyright @ 2011-2019 范文大全网 All Rights Reserved. 版权所有

免责声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。

 站长统计