Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
339 views
in Technique[技术] by (71.8m points)

mysql索引的疑惑??

先说说我对mysql索引的理解:

A

name      sex        age
cxl       male       21
yueshu    female     20
csy       female     0
....

普通情况下,name 字段未建立索引,A 表中查找 name = yueshu 的记录,则查询过程如下:

// 原表中查询
name = cxl       , No
name = yueshu    , Yes => return

一条条按照记录的先后顺序,线性查找下去,直到符合条件的出现,则终止查询。

name 建立索引的情况下,A 表中查找 name = yueshu 的记录,则查询过程如下(参考资料http://blog.csdn.net/iefreer/...):

1. 由于 name 字段建立了索引,所以实际上在建立索引的同时
   1.1 数据库会隐式的生成一张保存了当前索引字段和当前索引字段所在记录指针的索引表
       索引表会占据额外的磁盘空间
   1.2 占据的空间计算:
        1.2.1 占据空间 = 磁盘块数量 * 默认的磁盘块大小
            1.2.1.1 磁盘块数量 = 记录数 / 每磁盘块存放的记录数
                1.2.1.1.1 每磁盘块存放的记录数 = 默认的磁盘块大小 / 每条记录占据的磁盘大小

2. 查找数据的时候是在这张索引表中去查找的,并不会在原表中进行查找
    2.1 mysql查询过程
        2.1 mysql 查询是在磁盘块上进行线性查找
    2.2 查找效率对比
        2.2.1 索引表中的磁盘块数量 远小于 原表中的磁盘块数量,所以在建立了索引的字段上进行查找
              能够在更小的范围内查找出想要的结果,因而,效率,非常高

请结合 参考资料 上的描述,先纠正下我对索引的理解,然后在给出正确的解释...谢谢


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

/**
一条条按照记录的先后顺序,线性查找下去,直到符合条件的出现,则终止查询。
**/
错误1:会全表扫描.因为有可能有多条

索引可以很形象的表示为书的目录.
如果没有目录.你要找到某一章节.需要翻遍一本书.耗时
现在为章节建立了索引.生成了目录页.
目录占了2张纸.但是查询时.可以快速的找到某一章节在第几页.

索引的缺点,数据量大时,在 update,insert 操作,影响性能.因为不仅要更新数据,还有更新索引.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...