mysql查询优化

    xiaoxiao2021-03-25  86

    **用来加速数据库查询的技术有很多,但是最重要的方式就是为表建立索引。如果说你抛开索引这个方法而去通过其他方式去优化查询速度,那纯粹就是在浪费时间。下面先说说索引带来的优点**: 1、索引是一种已经排好了顺序,也就是索引值是有序的,但是没有索引值的字段值是无序状态的,当你要搜索一个没有建立索引的表时,数据库会全盘扫描表中的每一行数据,直到最后一行。但是当你为该表增加索引之后,数据库会使用各种技术来快速定位索引值。比如这个索引表,如果你想要找female中位置是3的数据行,因为索引已经排好顺序了,3已经是当中最小的了,查询将结束。 2、在多表联合查询查询时,索引的优点更是被放大。比如你要在t1,t2,t3 三张表中查询每个字段相等的数据。比如: select t1.i1,t2.i2,t3.i3 from t1 inner join t2 inner join t3 where t1.i1=t2.i2 andt2.i2= t3.i3;

    假设每个表有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、利用慢查询日志找出那些性能低下的查询。在日志中频繁出现的查询可能不是最优查询,应该考虑优化

    这是在如何建立索引上的优化,接下来一章将讲述如何利用索引在程序上进行优化。谢谢观赏。

    转载请注明原文地址: https://ju.6miu.com/read-17170.html

    最新回复(0)