第二部分:MYISAM和INNODB索引结构
1、 简单介绍B-tree B+ tree树
2、 Myisam索引结构
3、 innodb索引结构
4、 Myisam索引与InnoDB索引相比较
第一部分:基础知识:
索引
官方介绍索引是帮助MySQL高效获取数据的数据结构。笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料。关键字index
唯一索引
强调唯一,就是索引值必须唯一,关键字unique index
创建索引:
1、create unique index 索引名 on 表名(列名);
2、alter table 表名 add unique index 索引名 (列名);
主键
主键就是唯一索引的一种(同时注意键和索引在概念上的区别),主键要求建表时指定,一般用auto_increatment列,关键字是primary key
主键创建:creat table test2 (id int not null primary key auto_increment);
全文索引
InnoDB不支持,Myisam支持,可在 CHAR、VARCHAR 或 TEXT 列上创建。
Create table 表名( id int not null primary anto_increment,title,varchar(100),FULLTEXT(title))type=myisam
单列索引与多列索引
索引可以是单列索引也可以是多列索引(也叫复合索引)。按照上面形式创建出来的索引是单列索引,现在先看看创建多列索引:
create table test3 (id int not null primary key auto_increment,uname char(8) not null default '',password char(12) not null,INDEX(uname,password))type=myisam;
注意:INDEX(a, b, c)可以当做a或(a, b)的索引来使用,但和b、c或(b,c)的索引来使用这是一个最左前缀的优化方法,在后面会有详细的介绍,你只要知道有这样两个概念
聚集
最近想利用空余时间做Code Review的相关事情,所以简单的整理了一下互联网上的文章。大家有兴趣的话,可以回复我,或者直接跟帖,我会尽量把大家的意见在我的新版Code Review中体现。
Code Review:代码审查是系统的计算机源代码的检查(通常被称为同行评审)[1]。
代码Manage工具:
Svn: Svn(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。
Cvs: CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。
Git: Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。[2]
Git 是 Linus Torvalds为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Mercurial: Mercurial是一种快速,易于使用的,分布式版本控制工具,为软件开发人员[3]。
代码review 工具:
1. Review board (http://www.review-board.org/)是一个基于web的工具。可以帮助我们追踪待决代码的改动,并可以让Code-Review更为容易和简练。尽管Review board 最初被设计在VMware项目中使用,但现在其足够地通用。当前,其支持这些代码版本管理软件:SVN,CVS,Perforce,Git,Bazaar,和Mercurial.
2. Rietveld (http://code.google.com/p/rietveld/)由Guido van Rossum开发(他是Python的创造者,现在是Google的员工)。当前,任何一个使用 Google Code的项目都可以使用 Rietveld。
3. CodeStriker (http://codestriker.sourceforge.net/)是一个基于Web的应用,其主要使用 GCI-Perl脚本支持在线的代码审查。Codestriker可以集成于CVS,Subversion,ClearCase,Perforce和Visual SourceSafe。并有一些插件可以提供支持其它的源码管理工具。
4. Groogle (http://groogle.sourceforge.net/)是一个基于WEB的代码评审工具。Groogle支持和Subversion集成。它主要提供如下的功能:
1) 各式各样语言的语法高亮。
2) 支持整个版本树的比较。
3) 支持当个文件不同版本的diff功能,并有一个图形的版本树。
4) 邮件通知所有的Reivew的人当前的状态。
大多数人都觉得IT业都是一个低龄行业,白发苍苍的老年人们跟“程序猿”这三个字是不会有任何联系的,他们不懂iPhone、Linux和云,只有那些精力旺盛的中青年人才能与代码进行无止尽的搏斗。但著名的IT老记者,56岁的史蒂文·沃恩·尼克尔斯却提醒人们:程序员,也是越老越辣的。
本文作者史蒂文·沃恩·尼克尔斯(Steven J. Vaughan-Nichols)算得上是一名骨灰级的老程序员和IT业者。早在上世纪七十年代,CP/M-80操作系统还是前沿技术,300bps还算很快的网络连接时,史蒂文就已经开始进行关于科技与商业相关文章的写作了,他也是第一个对万维网进行报道的记者。下面,就是他为广大老程序猿们发出的呼声:
我56岁了。虽然说我还不是真正意义上的爷爷,但是也老得差不多了。我最开始接触因特网是在上个世纪70年代。我使用的第一个编程语言是IBM 360汇编语言,第一个操作系统是IBM大型机OS/360系统。我是第一个报道万维网(Web)这个新的网络服务的记者,那时才1993年。不过其实我也只是知道了关于计算的一点点皮毛而已。
可是最近我注意到了很多言论,都在说我们这些老人们不能理解iPhone,Linux或者云之类的“新兴事物”。这让正在使用它们的我感到自己仿佛背叛了“老年人”这个群体一样。
但是,请大家看看我们IT领域的名人吧。丹尼斯·里奇(Dennis Ritchie),C语言之父,Unix的创建者,去年辞世,享年70岁。肯·汤普逊(Ken Thompson),Unix的另一位发明者,现在已经69岁。詹姆斯·高斯林(James Gosling),Java之父,现在已经57岁。比尔•盖茨(Bill Gates)和微软CEO史蒂夫·鲍尔默(Steve Ballmer)都是56岁。史蒂夫·乔布斯(Steve Jobs)离开我们时也是56岁。蒂姆·库克(Tim Cook),乔布斯的继承者,苹果现任首席执行官,51岁。
那对于Linux和开源呢?自由软件创始人理查德·斯托曼(Richard Stallman)现在已59岁。他的开源哲学的竞争对手埃里克·雷蒙(Eric S. Raymond)现在也54岁。而就连Linux之父李纳斯·托沃兹(Linus Torvalds)也已经过了不惑之年,虽然算不上老,但是也算是大龄中年人了。
当然,不仅仅只有这些著名老程序猿才能代表我们:有调查显示,2012年,有27%的社交网络用户年龄超过了45岁。
我们这代战后婴儿潮出生的人总愿意把自己想象成一个永远年轻的家伙,但事实很残酷,我们当中已经有一些人退休了,没退休的那些老头子们,却都身处在对老员工有敌意的IT业工作环境里。
我想这就是为什么一直有许多关于“老人不理解科技”的言论,也许是有些人为了隐藏“年龄偏见”,这个IT行业里公开的秘密。
确实,那些已经人到中年的人都有家有室,可能没有太多精力来一周工作80多个小时,但是那又怎样呢?早在几十年前,在佛瑞德·布鲁克斯(Frederick Brooks)的软件管理经典著作《人月神话》中就提到:在IT领域,人力和时间并不呈线性关系,大量人员和较短的时间,并不能缩短软件的开发进度。
代码好不好,经验最重要可悲的是,这种早该摒弃的“工时越长越好”的想法却在IT领域一直存在着,事实上,真正重要的是谁工作得更有效率。在一些如法律和会计等行业里,计费工时是唯一的衡量标准,这种系统鼓励人们在每件任务上花的时间越多越好。然而在IT行业并非如此,我们需要的是高质量高效率的完成工作,在尽可能短的时间内犯尽可能少的错。
你知道吗,那些很早就开始使用C语言的老程序员不一定就比一个20岁“精通”JavaScript的天才效率低。
我也并不是说老员工总是更好的,我知道很多人处于“待退休”状态,他们也懒得去学习新的技能。他们不能理解以前的服务思维已经在这个每个人都移居到云端的时代行不通了。
但最重要的是,优秀的“祖父级”程序猿也可以做的和年轻员工一样好。记住,那些老爷爷们不仅仅理解技术,也很有可能是这些技术的发明者。