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