stylefeng / Guns

Guns是一个现代化的Java应用开发框架,基于主流技术Spring Boot3 + Vue3 + JDK17,Guns的核心理念是提高开发人员开发效率,降低企业信息化系统的开发成本。
Apache License 2.0
3.87k stars 1.59k forks source link

优化sys_dict_type中的索引 #74

Open wtune opened 4 years ago

wtune commented 4 years ago

问题

表sys_dict_type中缺少一些需要的索引,通过测试,我们发现加上这些索引可以极大地提高相关查询的性能(高达80%),需要添加的索引和影响的查询分别如下所示:

1.sys_dict_type.code

code本质上是一个唯一字段,在DictTypeService中可以看出在更新和插入的时候都要判断是否已存在相同的code和name,同时在查询表的时候也经常会将code或name作为查询条件(例如DictTypeService#findPageBySpec),在这些字段上建立索引可以极大的提高相关查询的效率。

2.sys_dict_type.name

同上,name也是一个唯一字段,经常在更新和插入时会进行重复判断,同时也会在查询中作为条件,因此也应该添加索引。

3.sys_dict_type.sort

DictTypeService#findPageBySpec产生的查询总是会用sort字段进行排序,因此应该在sort字段上加索引从而加快相关查询。

4.sys_dict_type.(system_flag, sort)

测试中我们发现,由DictTypeService#findPageBySpec产生的查询经常会使用system_flag作为查询条件,并使用sort对查询结果进行排序,为了避免只有sort产生的row lookup,需要加上(system_flag, sort)的复合索引来避免该问题。

解决方法

添加缺少的索引 sys_dict_type.code sys_dict_type.name sys_dict_type.sort sys_dict_type.(system_flag, sort)