-
python官方扩展库索引是什么意思_python数据库索引
2020-12-03 12:30:23如何在一本书中查找某内容?对于这两个问题大家都不陌生:在字典中查找指定偏旁的汉字时,首先查询目录中指定的偏旁位置,再查询指定笔画的汉字,最后目录中提供的页码找到这个汉字;在书中查询某内容时,首先在目录...首先要思考两个问题:
如何在字典中查找指定偏旁的汉字?如何在一本书中查找某内容?对于这两个问题大家都不陌生:在字典中查找指定偏旁的汉字时,首先查询目录中指定的偏旁位置,再查询指定笔画的汉字,最后目录中提供的页码找到这个汉字;在书中查询某内容时,首先在目录中查询该内容所属的知识点,然后根据该知识点所对应的页码快速找到要查询的内容。
而在数据库中也可以建立类似目录的数据库对象,实现数据的快速查询,这就是索引。索引是将表中的一个或者多个字段的值按照特定的结构进行排序然后存储。
我们为什么要使用索引:(这是一个值得深思的问题)
使用索引到底有什么好处呢?如果没有索引,在查找某条记录时,MySQL 必须从表的第一条记录开始,然后通读整个表直到找到相关的记录。如果表越大,那么查找记录所耗费的时间就越多。如果有索引,那么 MySQL 可以快速定位目标记录所在的位置,而不必去浏览表中的每一条记录,效率远远超过没有索引时的搜索效率。
所以索引有自己专门的存储空间,与表独立存放。MySQL 中的索引主要支持以下三种存储方式:
(1) B-Tree 存储结构:使用最多的一种存储结构,使用 B-Tree 存储结构的索引的所有结点都按照 Balance Tree 的数据结构来存储,索引数据结点都在叶子结点。B-Tree 的基本思想是:所有值(被索引的字段)都是排过序的,每个叶结点到根结点距离相等。所以 B-Tree适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)。但是当索引为多字段时,字段的顺序特别重要。如图 6-1 所示,为 B-Tree 的存储结构示意图。
(2) R-Tree 存储结构:R-Tree 存储结构主要用于空间索引(设置为空间索引字段的数据类型必须是空间数据类型,如 GEOMETRY、POINT、LINESTRING、POLYGON)。
(3) Hash 存储结构:基于 hash 表的一种存储结构,所以这种存储结构的索引只支持精确查找,不支持范围查找,也不支持排序。这意味着范围查找或 ORDER BY 都要依赖 server层的额外工作。不同的存储引擎支持的存储结构不同:
(1) InnoDB 存储引擎(MySQL5.5 版本之后默认的存储引擎)支持 B-Tree 和 R-Tree
(MySQL5.7 新增功能),但默认使用的是 B-Tree。
(2) MyISAM 存储引擎(MySQL5.5 版本之前默认的存储引擎)支持 B-Tree 和 R-Tree,
但默认使用的是 B-Tree。
(3) MEMORY 存储引擎支持 B-Tree 和 Hash,但默认是 Hash。
需要注意的:
虽然索引可以提升数据的查询效率,但在使用索引时要注意以下几点:
(1) 索引数据会占用大量的存储空间。
(2) 索引改善检索操作的性能,但降低数据插入、修改和删除的性能。在执行这些操作
时,DBMS 必须动态地更新索引。
(3) 限制表中索引的数目。索引越多,在修改表时对索引做出修改的工作量越大。
(4) 并非所有数据都适合于索引。唯一性不好的数据从索引得到的好处并不多。
(5) 索引用于数据过滤和数据排序。如果你经常以某种特定的顺序排序数据,则该数据
可能是索引的备选。
(6) 可以在索引中定义多个字段(如省+城市),这样的索引只在以“省+城市”的顺序
排序时有用。如果只想按城市排序,则这种索引没有用处
索引的分类
从逻辑角度分析,可以将索引分为普通索引、唯一索引、主键索引、全文索引、空间索
引和复合索引六种,本小节中将会详细讲述这几种索引的特点。
1. 普通索引
普通索引是最基本的索引,它没有任何限制。创建索引的字段可以是任意数据类型,字段的值可以为空,也可以重复。比如说,创建索引的字段为员工的姓名,但是姓名有重名的可能,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。
2. 唯一索引
如果能确定某个字段的值唯一,那么在为这个字段创建索引的时候就可以使用关键字UNIQUE 把它定义为一个唯一索引。创建唯一索引的好处:简化了 MySQL 对索引的管理工作,唯一索引也因此而变得更有效率;MySQL 会在有新记录插入数据表时,自动检查新记录中该字段的值是否已经在某个记录的该字段中出现过了,如果已经出现,MySQL 将拒绝插入这条新记录。也就是说,唯一索引可以保证数据记录的唯一性。
事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
3. 主键索引
主键索引是为主键字段设置的索引,是一种特殊的唯一索引。主键索引与唯一索引的区别是在于:前者在定义时使用的关键字是 PRIMARY KEY,而后者使的是 UNIQUE;前者定义索引的字段值不允许有空值,而后者允许。
4. 全文索引
全文索引适用于在一大串文本中进行查找,并且创建该类型索引的字段的数据类型必须是 CHAR、VARCHAR 或者 TEXT。在 MySQL5.7 之前,全文索引只支持英文检索,因为它是使用空格来作为分词的分隔符,对于中文而言,使用空格是不合适的;从 MySQL5.7 开始,内置了支持中文分词的 ngram 全文检索插件,并且 InnoDB 和 MyISAM 存储引擎均支持全文检索。
5. 空间索引
设置为空间索引字段的数据类型必须是空间数据类型,如 GEOMETRY、POINT、LINESTRING、POLYGON,并且该字段必须设置为 NOT NULL。目前 InnoDB 和 MyISAM存储引擎均支持空间检索。
6. 复合索引
复合索引指在多个字段上创建的索引,这种索引只有在查询条件中使用了创建索引时的第一个字段,该索引才会被触发,这是因为使用复合索引时遵循“最左前缀”的原因。例如:当索引字段为(id, name)时,只有查询条件中适用了 id 字段,该索引才会被使用;如果查询条件中只有 name 字段是不会使用该索引的
-
《数据库索引设计与优化》中“MC”是什么意思
2019-02-13 17:12:58这个MC是什么意思,我没弄明白,谁可以解答以下,或者英文原版的书上这两段是怎么描述的。 还是前边还出现过这个词的解释我看遗漏了。 可能我写的太简单了,第二句中是上边有一个sql语句查询有两个索引可以选择,... -
写一本书和找一本书
2014-06-07 12:54:07藏品多没什么意义,关键是索引,你能用最快的速度找到你想找的那件,这才是有意义的。在一个博尔赫斯的那种包含所有图书的图书馆,找到一本书和写出那本书同样困难,找书的过程其实就是写书的过程。狄德罗,百科全书...端午和朋友去了苏州金鸡湖游玩,不料第二天下大雨,就呆在酒店玩Linux内核编译...感觉没意思就开始看那本总也看不完的《失控》,读到了一个思想,感觉挺有思想。
藏品多没什么意义,关键是索引,你能用最快的速度找到你想找的那件,这才是有意义的。
在一个博尔赫斯的那种包含所有图书的图书馆,找到一本书和写出那本书同样困难,找书的过程其实就是写书的过程。狄德罗,百科全书派人物,畅想了人类知识的汇总,汇总于一个博尔赫斯的图书馆中,但是他假设任何知识都是不可压缩的,即你不能用一个更短的短语来描述一个稍长的短语,在这种情况下,索引就是知识点本身。索引就是一种数据压缩,靠索引来查找会大大减小搜索空间。
类似的思想,我在很早以前也想过,我曾经觉得,家里只要一本新华字典就够了,因为不管是我的作文还是四大名著,所用的字都在这本字典中,可是,关键之处已经不再是字本身,而是字与字之间的关系。
在如今的信息碎片化时代,这是多么痛的领悟啊!信息碎片已经淹没了几乎所有人,我们终于有机会徜徉于狄德罗的百科全书了,但是我们什么也找不到,我们处在一个时时刻刻找寻的时代,具体在找什么,谁也不知道,找寻的过程替代了我们思考的过程,殊不知,找寻的代价已经超过了思考的代价。我曾经在Linux终端上工作的时候,希望输入一个之前输过的命令,可以采用三个办法,第一个办法是再输一遍,第二个是使用bash历史命令的自动补全,第三个是往上翻,哪个更节省时间呢?其实我只是想输入一个ls而已,直接输入敲两个字符和一个回车即可,但是如果采用其它两种方式,击键次数无疑会更多,孰优孰劣?值得思索。
写一本书的代价可能会比找一本书的代价更低...信息太多,等于没有信息。 -
什么是NoSQL数据库?
2014-07-21 23:24:20NoSQL数据库是什么 NoSQL说起来简单,但实际上到底有多少种呢?我在提笔的时候,到NoSQL的官方网站上确认了一下,竟然已经有122种了。另外官方网站上也介绍了本书没有涉及到的图形数据库和对象数据库等各个类别。... -
SQL Server 2008数据库设计与实现(关系数据库实现的通关宝典)--随书源代码
2013-02-06 12:04:00他是几本书的作者,这包括Professional SQL Server 2005 XML(Wrox,2006)和Professional LINQ(Wrox,2008),他还为SQL PASS Community Connector写每两周一次的特辑文章。他也为好几个网站供稿,这包括Wrox... -
Oracle性能诊断艺术(Oracle数据库优化的里程碑式著作)--详细书签版
2012-08-23 01:04:131.2 什么是性能问题 5 1.2.1 系统监控 6 1.2.2 响应时间监控 6 1.2.3 强迫调优失调症 6 1.3 如何解决性能问题 7 1.3.1 业务角度与系统角度 7 1.3.2 把问题分类 8 1.3.3 解决问题 8 1.4 小结 9 第... -
Oracle Database 9i10g11g编程艺术:深入数据库体系结构(第2版)--详细书签版
2013-02-03 11:42:53并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。 本书面向所有oracle 数据库应用开发人员和dba。 作译者 作者 ... -
让Oracle跑得更快:Oracle10g性能分析与优化思路--详细书签版
2013-02-06 16:23:02笔者在写这本书的时候,翻看了很多当前国内数据库方面的书籍,发现写性能优化的书并不多,特别是从工作经验和思路上来讨论性能方面的书,更是少之又少,这些因素让笔者思考要写这样一本书,这也算是这本书的一个... -
图像处理基础(第2版).[美]Maria Petrou(带详细书签).pdf
2019-01-05 02:38:43另外,对原书的索引,考虑中文的习惯进行了一些调整,并按中文次序进行了排列,希望能更好地服务于读者。 封面 -27 封底 -26 书名 -25 版权 -24 译者序 -19 前言 -18 目录 -16 第1章 导论 1 1.0.1 为什么要处理... -
LINGO软件的学习
2009-08-08 22:36:50因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和。 总的来说,LINGO可识别的集只有两种类型:原始集和派生集。 在一个模型中,原始集是基本的对象,不能再被拆分成... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--详细书签版
2013-02-04 12:43:52他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7 致谢 -6 目录 -5 第1章 SQL核心 1 1.1 SQL语言 1 1.2 数据库的接口 2 1.3 SQL*Plus 回顾 3 1.3.1 连接到... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码
2013-02-04 12:49:33他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7 致谢 -6 目录 -5 第1章 SQL核心 1 1.1 SQL语言 1 1.2 数据库的接口 2 1.3 SQL*Plus 回顾 3 1.3.1 连接到... -
php高级开发教程说明
2008-11-27 11:39:22后在适当的地方加以例外处理,当写一个应用程序时,应该知道你的代码从事的是什么工作, 能够快速地从一点转到另一点—但其他人可能认为这并不容易。如果你从开发组的某个人手 中获得一个源文件并需要添加一些特征,... -
Java面试宝典和大学生面试宝典
2012-02-23 15:12:36其实也不需要一定通过六级,但一 定要有相对多的单词量,能够看懂考题的意思。然后按自己的想法组织 语言来描述就可以。 国内企业一般对外语要求不是很看重,题目也是中文的。如果不想 进外企的话,也不用特别准备... -
《大话数据结构》( 程杰 编著)
2018-02-15 10:00:21与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。 本书以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇?一种趣味方式来叙述,大量引用了各种各样... -
大话数据结构三个版本
2018-09-10 09:39:38与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。 本书以一个计算机教师教学为场 景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种... -
c语言数据结构字符串模式匹配算法.zip
2011-06-12 00:20:37next 函数值究竟是什么含义,前面说过一些,这里总结。 设在字符串S中查找模式串T,若S[m]!=T[n],那么,取T[n]的模式函数值next[n], 1. next[n]= -1 表示S[m]和T[0]间接比较过了,不相等,下一次比较 S[m+1] 和T[0]... -
costas_loop代码
2012-10-08 14:40:33掌握一个跟踪环路的本质是重要的,光Costas环就有好多种,关键看你要应用在什么场合,实现复杂度有什么要求。 % 如果楼主想对costas环有点更深入的认识,建议考虑一下低SNR环境下或者高动态环境的载波跟踪这种例子...
-
TL1769_Initial_Ver0.7_20060213.pdf
-
TL1769_V0.7_20051005.pdf
-
Echarts图表靠右显示(轴和数据都靠右)
-
win10批处理优化.bat
-
零基础极简以太坊智能合约开发环境搭建并开发部署
-
TCP实现聊天
-
java正则表达式 邮件_如何使用Java正则表达式验证电子邮件地址。
-
java正则表达式 组_Java中的正则表达式命名组
-
libFuzzer视频教程
-
NV3035AN_V0.2.pdf
-
java输出1000内的所有合数_求1000以内所有素数/合数(之和),java算法(23行)...
-
个人资料目录转移工具 beta 0.4.exe
-
java正则表达式教程_java正则表达式教程
-
java正则表达式类_未公开的Java正则表达式字符类:\ p {C}
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
uci1960c_a0.1.pdf
-
Mysql数据库面试直通车
-
MySQL 高可用(DRBD + heartbeat)
-
java正则表达式及api_Java API 之 正则表达式
-
实验8:七段数码管扫描显示实验.docx