Below you will find pages that utilize the taxonomy term “索引”
October 8, 2016
一张图让你彻底理解聚簇索引与普通索引的区别[经典]
"\u003cp\u003e[\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/mysq_index.png\" alt=\"mysq_index\"\u003e][1]\u003c/p\u003e\n\u003cp\u003e下面分析下索引和锁的关系。\n1)delete from msg where id=2;\u003c/p\u003e\n\u003cp\u003e由于id是主键,因此直接锁住整行记录即可。\n\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/2f67547e0caa0d1ea9bc7cb53966eedf70d49db3.png\" alt=\"\"\u003e 图5\n2)delete from msg where token=’ cvs’;\u003c/p\u003e\n\u003cp\u003e由于token是二级索引,因此首先锁住二级索引(两行),接着会锁住相应主键所对应的记录;\n\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/e0ac34fd99404ccdee4ab1ec4889f47754ffcd82.png\" alt=\"\"\u003e 图6\n3)delete from msg where message=订单号是多少’;\u003c/p\u003e\n\u003cp\u003emessage没有索引,所以走的是全表扫描过滤。这时表上的各个记录都将添加上X锁。\n\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/aa9a94c735ec35cfe92cd5eca1015893aad8de58.png\" alt=\"\"\u003e 图7\u003c/p\u003e\n\u003cp\u003e强烈推荐阅读: …\u003c/p\u003e"
September 17, 2012
MySQL索引背后的数据结构及算法原理
"\u003cp\u003e\u003cstrong\u003e摘要\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。\u003c/p\u003e\n\u003cp\u003e文章主要内容分为三个部分。\u003c/p\u003e\n\u003cp\u003e第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。\u003c/p\u003e\n\u003cp\u003e第二部分结合MySQL数据库中MyISAM和InnoDB数据存储引擎中索引的架构实现讨论\u003cstrong\u003e聚集索引\u003c/strong\u003e、\u003cstrong\u003e非聚集索引\u003c/strong\u003e及\u003cstrong\u003e覆盖索引\u003c/strong\u003e等话题。\u003c/p\u003e\n\u003cp\u003e第三部分根据上面的理论基础,讨论MySQL中高性能使用索引的策略。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e数据结构及算法基础\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e索引的本质\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMySQL官方对索引的定义为:**索引(Index)是帮助MySQL高效获取数据的数据结构。**提取句子主干,就可以得到索引的本质:索引是数据结构。\u003c/p\u003e\n\u003cp\u003e我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。 …\u003c/p\u003e"
May 7, 2012
mongodb索引讲解与性能调优
"\u003cp\u003emongodb索引规则基本上与传统的关系库一样,大部分优化MySQL/Oracle/SQLite索引的技巧也适用于mongodb。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、 为什么用索引:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e当查询中用到某些条件时,可以对该键建立索引,以提高查询速度。\u003c/p\u003e\n\u003cp\u003e如果数据量很多且查询多于更新时,可以用索引提高查询的速度。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、 索引管理:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ea) 查询索引:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e查询已有索引的明细:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e查询索引很简单,比如说需要查询mailaccess数据库中的Mail collection上的索引时:\u003c/p\u003e\n\u003cp\u003emongo 进入mongo\u003c/p\u003e\n\u003cp\u003eMongoDB shell version: 1.8.1\u003c/p\u003e\n\u003cp\u003econnecting to: test\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003euse mailaccess 进入mailaccess database\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eswitched to db mailaccess\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003edb.Mail.getIndexes() 查询索引明细\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e[\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e“name” : “_id_”,\u003c/p\u003e\n\u003cp\u003e“ns” : “mailaccess.Mail”,\u003c/p\u003e\n\u003cp\u003e“key” : { …\u003c/p\u003e"
May 7, 2012
MongoDB 索引数据类型优化,节省60%内存
"\u003cp\u003e最近trunk.ly的工程师通过mongostat发现了大量的page fault,然后通过检查发现,他们的索引已经超出内存限制了(没有\u003ca href=\"http://blog.boxedice.com/2010/12/13/mongodb-monitoring-keep-in-it-ram/\"\u003ekeep all index in RAM\u003c/a\u003e)。于是他们决定开始减小索引大小,通过测试得出了如下的数据,不同的数据类型的索引大小有2到3倍的差距。\u003c/p\u003e\n\u003cp\u003e虽然能够想像得到,但是直观的数据图可能让我们更深刻的认识到。他们的测试再一次告诉我们:给索引定一个好的数据结构是多么重要。\u003c/p\u003e\n\u003cp\u003e这是测试结果图,分别是用int、MongoDB的ObjectID、base64和md5的字符串做索引产生的索引大小:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2012/05/mongodb_indexes_optimize.jpeg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2012/05/mongodb_indexes_optimize.jpeg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e测试过程也非常简单,首先用下面脚本将各种不同数据结构的数据写入到不同的collection里:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/usr/bin/env python\n\nimport pymongo\nimport bson\nfrom pymongo import Connection\n\ndb = connection.test_database\n\nprint(\u0026#39;ObjectID\u0026#39;)\nfor i in range(1, 1000000): …\u003c/code\u003e\u003c/pre\u003e"
November 24, 2011
由浅入深理解索引的实现
"\u003cp\u003e\u003cstrong\u003e00 – 背景知识\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e– B-Tree \u0026amp; B+Tree\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://en.wikipedia.org/wiki/B%2B_tree\" title=\"B+Tree\"\u003ehttp://en.wikipedia.org/wiki/B%2B_tree\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://en.wikipedia.org/wiki/B-tree\" title=\"B-Tree\"\u003ehttp://en.wikipedia.org/wiki/B-tree\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e– 折半查找(Binary Search)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://en.wikipedia.org/wiki/Binary_search_algorithm\" title=\"Binary Search\"\u003ehttp://en.wikipedia.org/wiki/Binary_search_algorithm\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e– 数据库的性能问题\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA. 磁盘IO性能非常低,严重的影响数据库系统的性能。\u003c/p\u003e\n\u003cp\u003eB. 磁盘顺序读写比随机读写的性能高很多。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e– 数据的基本存储结构\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA. 磁盘空间被划分为许多大小相同的块(Block)或者页(Page).\u003c/p\u003e\n\u003cp\u003eB. 一个表的这些数据块以链表的方式串联在一起。\u003c/p\u003e\n\u003cp\u003eC. 数据是以行(Row)为单位一行一行的存放在磁盘上的块中,如图所示.\u003c/p\u003e\n\u003cp\u003eD. 在访问数据时,一次从磁盘中读出或者写入至少一个完整的Block。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.mysqlops.com/wp-content/uploads/2011/11/fig12.jpg\"\u003e\u003cimg src=\"http://www.mysqlops.com/wp-content/uploads/2011/11/fig12.jpg\" alt=\"\"\u003e\u003c/a\u003e\n Fig. 1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e01 – 数据基本操作的实现\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e基本操作包括:INSERT、UPDATE、DELETE、SELECT。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e– SELECT\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA. 定位数据\u003c/p\u003e\n\u003cp\u003eB. 读出数据所在的块,对数据 …\u003c/p\u003e"
July 13, 2010
查看mysql索引使用情况
"\u003cp\u003e查看索引使用情况\u003c/p\u003e\n\u003cp\u003e如果索引正在工作, Handler_read_key 的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。\u003c/p\u003e\n\u003cp\u003eHandler_read_rnd_next 的值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明表索引不正确或写入的查询没有利用索引。\u003c/p\u003e\n\u003cp\u003e语法:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emysql\u0026gt; show status like ‘Handler_read%’;\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e有关更多MySQL之Handler_read_*介绍参考:\u003c/p\u003e"