注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

标签:MySQL InnoDB索引与算法

MySQL

MySQL索引选择性

什么是索引选择性? 既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引。 第一种情况是表记录比较少,例如一两千条……继续阅读 »

彭东稳 3个月前 (09-21) 822浏览 0评论 2个赞

MySQL InnoDB

MySQL InnoDB联合索引学习

联合索引是指对表上的多个列进行索引,其创建方法与单个索引一样,不同之处仅在于有多个索引列。例如,以下代码创建了一张t表,并且索引idx_a_b是联合索引,联合的列为(a,b)。 create table t(a int, b int, primary key(a), key idx_a_b(a,b)) engine=innodb……继续阅读 »

彭东稳 3个月前 (09-11) 713浏览 0评论 1个赞

MySQL InnoDB

MySQL索引原理及SQL优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少……继续阅读 »

彭东稳 4个月前 (08-28) 963浏览 0评论 5个赞

MySQL InnoDB

MySQL InnoDB聚簇及辅助索引

一、B+树索引 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? 我们都知道CPU是很快的,磁盘是很慢的,……继续阅读 »

彭东稳 7个月前 (05-31) 1746浏览 0评论 3个赞

MySQL

MySQL覆盖索引学习

覆盖索引 通常大家会根据查询的where条件来创建合适的索引,不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个查询,而不单单是where条件部分。索引确实是一种查找数据的高效方式,但是MySQL也可以使用索引来直接获取列的数据,这样就不再需要读取数据行。如果索引的叶子节点中已经包含要查询的数据,那么还有必要再回表查询呢?如果一个索引包含,或者说覆盖……继续阅读 »

彭东稳 8个月前 (04-27) 1828浏览 0评论 1个赞

MySQL InnoDB

MySQL索引最左前缀原理与优化

一、示例数据库 为了讨论索引策略,需要一个数据量不算小的数据库作为示例。本文选用MySQL官方文档中提供的示例数据库之一:employees。这个数据库关系复杂度适中,且数据量较大。下图是这个数据库的E-R关系图(引用自MySQL官方手册): MySQL官方文档中关于此数据库的页面为https://dev.mysql.com/doc/employee/en……继续阅读 »

彭东稳 9个月前 (03-27) 1616浏览 0评论 2个赞

MySQL InnoDB

MySQL InnoDB索引创建语句

一、索引算法 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引。 多列索引:即一个索引包含多个列,但是此时列的顺序也十分重要,因……继续阅读 »

彭东稳 11个月前 (01-06) 1900浏览 0评论 2个赞

MySQL

MySQL InnoDB索引设计策略

一、索引设计原则 在MySQL中常用的B+树索引分为聚簇索引和辅助索引,关于辅助索引,虽然个数没有限制(聚簇索引一个表只能由一个),但可以想想一下,任何事物都是有两面性的:建立索引,是为了提高查询性能,但这是以降低写入性能为代价的。因为所有索引,在表需要写入数据时,都需要去维护索引数据以保证所有索引都是最新的、最准确的,所以可想而知,索引越多,写入性能越差,……继续阅读 »

彭东稳 11个月前 (01-06) 1495浏览 0评论 1个赞

MySQL

MySQL InnoDB索引与算法介绍

一、索引的介绍 数据库是用来存储数据的工具,存进去,是为了更方便地取出来,而且越快越好,这样对性能的要求就非常高了。在计算机上运行一个任务,一般有三部分涉及性能,分别是内存大小,CPU及磁盘的速度,而索引是一种存储方式,与它相关的最重要部分就是磁盘,所以磁盘性能的高低,直接影响了在数据库中查找数据的效率。另外,磁盘的性能与读写顺序有关,对于普通的机械硬盘,顺……继续阅读 »

彭东稳 11个月前 (01-05) 833浏览 0评论 3个赞

MySQL

MySQL执行计划详解(EXPLAIN)

一、EXPLAIN OUTPUT FORMAT EXPLAIN(执行计划)在MySQL中作用非常大,在EXPLAIN的帮助下,你就知道什么时候该给表添加索引,以使用索引来查找记录从而让select运行更快。如果由于不恰当使用索引而引起一些问题的话,可以运行analyze table来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。 EXP……继续阅读 »

彭东稳 1年前 (2016-07-02) 1894浏览 0评论 1个赞