大家好,我是程序员大猩猩。
在我们日常开发过程中,写一段SQL是必不可少的工作,那么你的SQL到底好不好,标准不标准,运行效率怎么样,那就要看我们平时对数据库的数据结构和SQL优化的了解程度来看了。
提到SQL优化,那我们第一个就应该要知晓到的知识就是索引了。数据库索引优化是提高数据库查询性能的重要手段。
正确的索引可以减少查询时需要扫描的数据量,从而加快我们的查询速度。
那么,我们如何进行索引优化呢?
一、选择索引列
一般我们在建库建表时,都会标记主键,而主键的主要作用就是我们用它来实现经常查询所用到的字段。当然不单单是主键、还有一些时间列都是我们经常要用到和筛选的字段。
怎么来判别呢,可以知道,经常在WHERE子句、JOIN操作、ORDER BY和GROUP BY中出现的列名。
就是我们可能要选择它做为索引列。
为什么我说是可能是呢?因为我们还要看它是否是高选择性的列,就是使用度非常高,并且还是有具有唯一性质的列。
那么相反,低选择性的列,比如说什么性别、或者是什么类别的列,因为它只有几个重复的值,那么就不符合单独的建立索引了。
二、使用复合索引
复合索引顾明思议就是多个列生成同一个索引列,比如说我们在查询条件中包含了多个列,那么就可以创建包含这些列的复合索引。
并且要确保复合索引中的列的顺序和查询条件中的列顺序匹配
三、限制索引的量
索引是可以增强查询的性能,但是别忘了,数据库还有增、删、改的操作,过多的索引,会导致数据库写的操作成本。
所以我们要做到,使用数据库监控工具或者用定期自查的习惯来删除,我们不再使用的或者很少使用的索引。
四、索引列类型选择
使用前缀索引,如果我们不得不使用的CHAR、VARCHAR类型的列作为索引,而且列的长度很长,那么我们可以使用前缀索引来节约空间,还能提高效率。
五、不要在索引上进行计算
尽量的避免来索引上进行使用函数计算或者直接计算,因为这样会导致索引失效。
六、索引维护
相信我们很多时候,测试玩一段SQL之后,它的性能和索引都没有问题,那么基本上这个问题就算完成了。
但是在我们程序进行过大量的增删改查之后,索引可能会变得碎片化,那么索引维护就会减少这些碎片。
比如说重新建立或者重新组织一下索引,但是在数据量庞大的情况下,还是要谨慎执行,因为索引的维护可能会消耗大量的资源会影响到数据库其他正常的操作。所以选择流量较小的时段,或者进行分布式维护。以减少对正常业务的影响。
此外,维护操作的频率应该根据数据库的具体使用情况来确定,过度维护和不足维护都可能带来问题。