Open wtune opened 4 years ago
表sys_dict_type中缺少一些需要的索引,通过测试,我们发现加上这些索引可以极大地提高相关查询的性能(高达80%),需要添加的索引和影响的查询分别如下所示:
code本质上是一个唯一字段,在DictTypeService中可以看出在更新和插入的时候都要判断是否已存在相同的code和name,同时在查询表的时候也经常会将code或name作为查询条件(例如DictTypeService#findPageBySpec),在这些字段上建立索引可以极大的提高相关查询的效率。
同上,name也是一个唯一字段,经常在更新和插入时会进行重复判断,同时也会在查询中作为条件,因此也应该添加索引。
由DictTypeService#findPageBySpec产生的查询总是会用sort字段进行排序,因此应该在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)
问题
表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)