假设每个表有1000行,那么可能的组合有1000*1000*1000种,这可是一种巨大的浪费,假设用了索引,那么我们只需要t1进行全盘扫描就其他两个表可以通过索引查找,这个查询方式比不用索引快乐100万倍。这种优化效果可想而知。
接下来介绍一下几种常见的索引场合 1、索引可以加快where字句的查询以及连接表中的查询,加快搜索的速度 2、对于使用MIN()或者MAX()、order by 、group by字句可以高效地查找以及分类和分组 3、只查询索引表里面的数据,不想查询其他数据行的值,这就跟电脑装了固态一样,直接在固态里面拿数据了上面把索引说的那么好,但是其实也是有一点代价的,只是这种代价被索引的优点所掩盖了,不可能为了代价不去用索引,了解代价只是为了更加高效地使用索引而已。索引的代价分为时间代价和空间代价。 1、时间代价在查询上为我们提高了速度,但是在插入、删除、更新数据的时候,不单只是考虑插入数据、删除数据、更新数据了,还要为更改索引花费时间,但是有什么所谓了呢,我们大部分的时间都在查询数据是吧。 2、空间上的代价就比较明显了,InnoDB存储引擎将行与索引值分开放置,但是InnoDB引擎只是用一个表空间,管理所有的数据存储以及索引存储,这样很容易达到表的上限。(即使InnoDB引擎不会受到操作系统文件大小限制) 接下来就要选择合适的索引了 1、为用于搜索、排序或者分组的列创建索引。对于一些输出展示的列可以不用创建索引。也就是对于where子句后面的查询条件以及排列条件进行创建索引 2、选择重复值少的字段设置索引。比如对于性别字段,不是男就是女重复性非常大。索引毫无用处。 3 、选择索引短小值。如果你将文章内容建立索引,那就是一种不明智的选择,这么长的值会让数据库引擎很难堪的。短小的值索引速度快,可以减少对I/O请求。 4、索引字符串的前缀。根据第三个要求的特点,可以选择将长的数值截取前面的字符(前面字符尽量能代表唯一性),作为索引。 5、利用最左前缀。这是对于创建包含n列的符合索引。比如一个符合索引包括(x1,x2,x3),则下面三种情况都可以充分利用索引
x1,x2,x3 x1,x2 x1 6、不要建立过多的索引,这个在代价里面阐述过了,不是越多越好,要懂得高效实用 7、利用慢查询日志找出那些性能低下的查询。在日志中频繁出现的查询可能不是最优查询,应该考虑优化这是在如何建立索引上的优化,接下来一章将讲述如何利用索引在程序上进行优化。谢谢观赏。