`
thecloud
  • 浏览: 881376 次
文章分类
社区版块
存档分类
最新评论

数据库索引问题

 
阅读更多

遇到的问题前提如下:

一张包含四个字段的表,表名为test,表中有100万条记录。

第一列为id,主键,自增。

第二列为col1,随机为MikeBobJackAliceCathyAnnBettyCindyMaryJane中的一个

第三列为col2,随机为一个5位字母,字母限制在a-e

第三列为col3,随机为一个1-20之间的整数

(1)select count(*) from test group by col1 order by count(*);记录执行时间

(2)找出所有第二列以ab开头的记录,记录执行时间

对于第一题建立col1上的索引以后查询时间缩短了一半。而第二题建立在col2上的索引发现时间由原来的0.6s增加到7s。

我的环境是java语言和mysql数据库,使用jdbc连接。

下面是第二题添加索引代码和查询的代码


得到高人指点,将该疑惑解决了。

我尝试着在插入col2的数据时,有规律的插入数据,因为总行数为100万行,数据范围从aaaaa到eeeee一共有3125种,可以按照顺序将每种数据插入320行,这样整体col2的数据就是根据字典序进行排序的。同样建立索引以后查询,用时在0.2s左右。终于恍然大悟。

从网上看到相关资料,了解到当col2是随机值时,在col2上建立的索引属于非聚集索引(非聚集索引就好像按照偏旁部首的索引方式查找汉语字典中的字),而当col2是按照一定的顺序存放时,在col2上建立的索引属于聚集索引(聚集索引就好像按照汉语拼音的索引方式查找汉语字典中的字)。在实际应用中,聚集索引可以高效的提高查询速度,而非聚集索引则不具有这个特性。

具体的原因可能是这样的,对于聚集数据,当用户查询时,通过索引查找到数据在磁盘中的位置,因为其的聚集特性,可以从这个位置开始顺序的读取大量的符合要求的信息。就好像你以汉语拼音为索引查找一个读音的页码以后,可以找到大量的这个读音的字。但是非聚集则不然,非聚集索引查询到的结果分布在磁盘的各个地方,需要频繁的移动磁头才能够获取这些信息,就好像你以偏旁部首为索引查找一个偏旁部首的字时,你要频繁的翻动书页才能找到所有的符合要求的字。

分享到:
评论

相关推荐

    漫谈数据库索引漫谈数据库索引漫谈数据库索引

    漫谈数据库索引漫谈数据库索引漫谈数据库索引漫谈数据库索引

    数据库索引设计和优化

    数据库索引设计和优化 经典的数据库索引的书籍......................

    高清完整版 数据库索引设计与优化

    高清完整版 数据库索引设计与优化 高清完整版 数据库索引设计与优化

    数据库 索引及优化

    数据库 索引 优化 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引...

    数据库索引设计与优化.pdf

    《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地...

    数据库索引设计与优化

    数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化数据库索引设计与优化...

    oracle,数据库索引

    数据库索引

    数据库索引设计原则.

    oracle数据库索引设计原则. 数据库索引设计原则.

    数据库索引设计与优化.part1

    数据库索引设计与优化.part1数据库索引设计与优化.part1数据库索引设计与优化.part1数据库索引设计与优化.part1数据库索引设计与优化.part1数据库索引设计与优化.part1数据库索引设计与优化.part1数据库索引设计与...

    数据库索引设计与优化.part2

    数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与...

    数据库索引

    数据库 索引 sql调优

    数据库索引,到底是什么

    • 数据库索引用于加速查询 • 虽然哈希索引是O(1),树索引是O(log(n)),但SQL有很多“有序”需求,故数据库使用树型索引 • InnoDB不支持哈希索引 • 数据预读的思路是:磁盘读写并不是按需读取,而是按页预读,一...

    数据库索引的数据结构

    数据库索引的数据结构。

    空间数据库索引技术的研究

    空间数据库索引技术的研究空间数据库索引技术的研究

Global site tag (gtag.js) - Google Analytics