问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何成为数据库的专家?应该走怎样一条路?再请高手们推荐一些书籍和网站。谢谢啦

发布网友 发布时间:2022-04-30 04:57

我来回答

13个回答

懂视网 时间:2022-04-30 09:19

为什么需要索引

数据在磁盘上是以块的形式存储的。为确保对磁盘操作的原子性,访问数据的时候会一并访问所有数据块。磁盘上的这些数据块与链表类似,即它们都包含一 个数据段和一个指针,指针指向下一个节点(数据块)的内存地址,而且它们都不需要连续存储(即逻辑上相邻的数据块在物理上可以相隔很远)。

鉴于很多记录只能做到按一个字段排序,所以要查询某个未经排序的字段,就需要使用线性查找,即要访问N/2个数据块,其中N指的是一个表所涵盖的所有数据块。如果该字段是非键字段(也就是说,不包含唯一值),那么就要搜索整个表空间,即要访问全部N个数据块。

然而,对于经过排序的字段,可以使用二分查找,因此只要访问log2 N个数据块。同样,对于已经排过序的非键字段,只要找到更大的值,也就不用再搜索表中的其他数据块了。这样一来,性能就会有实质性的提升。

什么是索引

索引是对记录按照多个字段进行排序的一种方式。对表中的某个字段建立索引会创建另一种数据结构,其中保存着字段的值,每个值又指向与它相关的记录。这种索引的数据结构是经过排序的,因而可以对其执行二分查找。

索引的缺点是占用额外的磁盘空间。因为索引保存在MyISAM数据库中,所以如果为同一个表中的很多字段都建立索引,那这个文件可能会很快膨胀到文件系统规定的上限。

索引的原理

首先,来看一个示例数据库表的模式:

字段名  数据类型  在磁盘上的大小
id (Primary key) Unsigned INT 4 字节
firstName  Char(50)  50 字节
lastName  Char(50)  50 字节
emailAddress Char(100) 100 字节

注意:这里用char而不用varchar是为了精确地描述数据占用磁盘的大小。这个示例数据库中包含500万行记录,而且没有建立索引。接下来我们就分析针对这个表的两个查询:一个查询使用id(经过排序的键字段),另一个查询使用firstName(未经排序的非键字段)。

示例分析一

对于这个拥有r = 5 000 000条记录的示例数据库,在磁盘上要为每条记录分配 R = 204字节的固定存储空间。这个表保存在MyISAM数据库中,而这个数据库默认的数据库块大小为 B = 1024字节。于是,我们可计算出这个表的分块因数为 bfr = (B/R) = 1024/204 = 5,即磁盘上每个数据块保存5条记录。那么,保存整个表所需的数据块数就是 N = (r/bfr) = 5000000/5 = 1 000 000。

使用线性查找搜索id字段——这个字段是键字段(每个字段的值唯一),需要访问 N/2 = 500 000个数据块才能找到目标值。不过,因为这个字段是经过排序的,所以可以使用二分查找法,而这样平均只需要访问log2 1000000 = 19.93 = 20 个块。显然,这会给性能带来极大的提升。

再来看看firstName字段,这个字段是未经排序的,因此不可能使用二分查找,况且这个字段的值也不是唯一的,所以要从表的开头查找末尾,即要访问 N = 1 000 000个数据块。这种情况通过建立索引就能得到改善。

如果一条索引记录只包含索引字段和一个指向原始记录的指针,那么这条记录肯定要比它所指向的包含更多字段的记录更小。也就是说,索引本身占用的磁盘空间比原来的表更少,因此需要遍历的数据块数也比搜索原来的表更少。以下是firstName字段索引的模式:

字段名  数据类型 在磁盘上的大小
firstName Char(50) 50 字节
(记录指针) Special  4 字节

注意:在MySQL中,根据表的大小,指针的大小可能是2、3、4或5字节。

示例分析二

对于这个拥有r = 5 000 000条记录的示例数据库,每条索引记录要占用 R = 54字节磁盘空间,而且同样使用默认的数据块大小 B = 1024字节。那么索引的分块因数就是 bfr = (B/R) = 1024/54 = 18。最终这个表的索引需要占用 N = (r/bfr) = 5000000/18 = 277 778个数据块。

现在,再搜索firstName字段就可以使用索引来提高性能了。对索引使用二分查找,需要访问 log2 277778 = 18.09 = 19个数据块。再加上为找到实际记录的地址还要访问一个数据块,总共要访问 19 + 1 = 20个数据块,这与搜索未索引的表需要访问277 778个数据块相比,不啻于天壤之别。

什么时候用索引

创建索引要额外占用磁盘空间(比如,上面例子中要额外占用277 778个数据块),建立的索引太多可能导致磁盘空间不足。因此,在建立索引时,一定要慎重选择正确的字段。

由于索引只能提高搜索记录中某个匹配字段的速度,因此在执行插入和删除操作的情况下,仅为输出结果而为字段建立索引,就纯粹是浪费磁盘空间和处理时 间了;这种情况下不用建立索引。另外,由于二分查找的原因,数据的基数性(cardinality)或唯一性也非常重要。对基数性为2的字段建立索引,会 将数据一分为二,而对基数性为1000的字段,则同样会返回大约1000条记录。在这么低的基数性下,索引的效率将减低至线性查找的水平,而查询优化器会 在基数性小于记录数的30%时放弃索引,实际上等于索引纯粹只会浪费空间。

查询优化器的原理

查询优化中最核心的问题就是精确估算不同查询计划的成本。优化器在估算查询计划的成本时,会使用一个数学模型,该模型又依赖于对每个查询计划中 涉及的最大数据量的基数性(或者叫重数)的估算。而对基数性的估算又依赖于对查询中谓词选择因数(selection factor of predicates)的估算。过去,数据库系统在估算选择性时,要使用每个字段中值的分布情况的详尽统计信息,比如直方图。这种技术对于估算孤立谓词的 选择符效果很好。然而,很多查询的谓词是相互关联的,例如 select count(*) from R where R.make=‘Honda‘ and R.model=‘Accord‘。查询谓词经常会高度关联(比如,model=‘Accord‘的前提条件是make=‘Honda‘),而估计这种关联的选择性非常困难。查询优化器之所以会选择低劣的查询计划,一方面是因为对基数性估算不准,另一方面就是因为遗漏了很多关联性。而这也是为什么数据库管理员应该经常更新数据库统计信息(特别是在重要的数据加载和卸载之后)的原因。

数据库知识-认识索引

标签:

热心网友 时间:2022-04-30 06:27

3楼的的确很强大!!!突破了牛B直达牛C了!!!!
我是从事网站开发设计的,同时也是学生。见识过几个牛人,也有点实战经验。
成为数据库专家你应该具备以下条件:
1.有扎实的语言基础,对jdbc关联api要熟悉
2.对数据结构有深刻的认识,任何数据库软件都是在数据结构的基础上走过来的所以一定要弄通。本人教科书是《数据结构与算法分析》是英文教材不过也有中文版的,但是书不在身上所以提供不了出版社信息和作者。
3.对文件储存操作有一定基础和认识,这类教材可参考各大计算机基础课程书籍
4.数据库理论概念要清晰,不能马虎含糊。本人教科书为《数据库系统概念》作者是Abraham Silberschatz、Henry E Korth 机械工业出版社的。应该也有中文完整版的。
5.精通一到两种数据库,其他的也要有了解。这样的有关数据库的实用教程是到处都有的。
6.真的牛B的时候可以专门研究数据挖掘上的东西,和数据库的优化

三楼的那个最后还是想汗一下,以表敬意~~~~

热心网友 时间:2022-04-30 07:45

应该是要往Oracle方面发展吧,我觉得光学是没用的,一定要结合实际的工作经验才会使你更有价值,我是搞程序的,只会一些简单的数据库操作,呵呵。反正就是基础要牢固,触发器,存储过程,游标,试图,表分区。。。等等,当然你自己要注意数据库的索引,查询的优化,平时日志维护,备份之类的,还有数据库的安全漏洞,都要注意,太多太多。。。。听说oracle的DBA认证考试都要1W多,没过还要继续交几千块钱补考,但是过了,工资一个月随便上W,当然你如果是要做数据库挖掘方面的工资,工资还会更高,看你自己往那方面发展了,不过活到老,学到老,总会有前途的。。。记住必须要有实践的经验才最好。。。

热心网友 时间:2022-04-30 09:19

数据库专家,看看你想学哪一方面了,如果想成为DBA,那就把查询语句学好了,如果你看到国内的数据库还没有用于商用,你可以救国,利用C编写一个数据库,发誓打败SQL server 2000,Oracal,sybase,DB2,为国人争光。

热心网友 时间:2022-04-30 11:11

我也想学习学习,但现在一般都是在用SQL server 2000,Oracal等所以多学习他们喽.

热心网友 时间:2022-04-30 13:19

3楼很强大- -自己写数据库打败微软打败甲骨文
我的那个汗啊~~~~~~~~哗啦啦的下个不停大哥自学要走的路要长的多建议找个地方去学把

热心网友 时间:2022-04-30 15:43

千里之行使于足下,你已经做的很好了,继续就可以了。

热心网友 时间:2022-04-30 18:25

自己的职业方向是什么?

数据库专家,很笼统

oracle,db2,sybase,sql server,mysql....
都精通比较难啊
不过大家通用的是基本sql,这个是最基本的
比较有钱途的还是oracle

可以考虑向oracle dba发展

热心网友 时间:2022-04-30 21:23

先学习SQL,在到Oracal 在看你工作或者学习所需要的或是你的兴趣开始专业的学习,

热心网友 时间:2022-05-01 00:37

简单的看书自学是不中的,要与实际联系起来,这个我是深有体验,在学校只顾着学习,这会学会了过一段又忘了,现在我毕业了,我主要做软件实施的,虽然与开发八竿子打不着,但是感觉我的sql知识也是突飞猛进的增长,这就是跟时间相结合的真理啊!书籍跟网站哪多了去了,关键是要专注!兄弟,努力吧,虽然咱不能把甲骨文、微软打败,但是你要是努力了,我们一样当你是民族英雄!!!

热心网友 时间:2022-05-01 04:09

哇,我也是学计算机信息管理的

热心网友 时间:2022-05-01 07:57

就老老实实搞GIS开发呗

热心网友 时间:2022-05-01 12:01

晕。。我数据库只考了69分。。看来是帮不了你了。。。呵呵
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
父母爱情:最不像演员的演员,出场狼狈却没想到是个“王者”吗?_百度知 ... 上海交大研究生电气工程及其自动化专业住宿条件如何 上海交大的电气工程怎么样 上海交通大学电气工程系历史沿革 上海交大电院直博几年 抖音的取消收藏功能怎么不见了 成考本科专业有哪些专业可以选 专升本成人高考有些什么专业可以选择 2024专升本成考有什么专业可以选 2024美术生高考文化课300分能上什么大学 我电脑要重装系统,我要用U盘里的重装系统安装,能让高手教下如何一步步安装么? 汽车发动机型号:CEA同EA888有何区别? oppoa55hd是什么意思,怎么关闭 OPPOA55手机另一个_了再用另一个找的时候手机锁屏无法反回了怎么办 一直播未满十八岁可以直播吗? 未成年学生实名认证秘乐视频对他有其他影响吗? 在哪里设置,可以禁止看视频? 那年妈妈18岁旧照变视频用什么App 怎么禁止视频播放软件? gif 动态图片怎么修改尺寸大小,fireworks修改图片大小后帧的位置不对, 我今年14岁女朋友也14岁,女朋友要跟我接视频可是我却跟他说我18岁怎么可以让? GIF格式动态图片转换后怎么不能动了 西瓜视频怎么不18岁开播? GIF图片修改按照要求用PS把图片的每一帧都修改之后 如何拼合后继续保存为GIF动态图片 平顶山一模考试时间 能否有热心的学长学姐指点一下,一模二模三模的范围以及高三各种考试的时间表 高考一模是高三上学期期中考试还是下半学期期中考试 高三一模考试学校一般都是提前一天拿到时间吗? 2022河南省高三适应性考试时间 高考一模什么时候? 辽宁省导游证考试导游词如何准备? 辽宁概况导游词 介绍东戴河导游词 沈阳张氏帅府的详细导游词 《辽宁导游词选编》的景点都有什么?请帮忙介绍两个。 2019年辽宁省导游词20篇都有哪些景点? 请问LED灯具怎样维护? 求新颖经典的辽宁大连金石滩导游词 辽宁农业职业技术学院学校导游词怎么写? 我需要辽宁营口望儿山的导游词?谢谢急用 急需!!盘锦红海滩导游词,考试用… 辽宁导游词选编(2008年的) 急需羊肉串.鸡翅的腌制方法,配料, 抖音点赞最在最下面说明什么 急需两篇导游词!!! 在无锡教师资格证培训需要多久呢? 求历届香港金像奖终身成就奖的获奖名单? 微信用QQ邮箱登录+账号输入有误怎么回事 烧烤鸡翅如何腌制 2012年香港电影金像奖获奖名单