Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

优化数据库索引加快查询速度 #33

Closed
wtune opened this issue Mar 18, 2020 · 1 comment
Closed

优化数据库索引加快查询速度 #33

wtune opened this issue Mar 18, 2020 · 1 comment

Comments

@wtune
Copy link
Contributor

wtune commented Mar 18, 2020

问题

经过测试我们发现在数据库中添加一些索引可以提高部分常用查询的效率(大部分提升性能高于%85,即节省超过85%的时间开销)。

1.cms_content_related.related_content_id

CmsContentRelatedDao中可以看出在查询cms_content_related表时查询条件经常会包含related_content_id,通过实际的测试收集数据库log,我们发现不少查询条件仅包含related_content_id,无法使用现有的联合索引,因此可以单独为related_content_id建立索引从而极大地提高相关查询语句的效率。

2.cms_word.site_id

CmsWordDao中可以看出在查询cms_word表是查询条件往往都包含有site_id,测试并查询数据库日志后确实如此,且存在许多查询条件仅包含site_id的查询语句,因此可以单独为site_id建立索引从而提高相关语句的查询效率。

3.sys_cluster.(heartbeat_date,master)

SystemClusterDao中可以看出,在查询表sys_cluster时master和heartbeat_date是两个经常共同出现的查询条件,测试过程的数据库查询日志结果符合预期,因此可以建立(heartbeat_date, master)联合索引从而加快查询速度。

4.sys_dept_page.page

SystemDeptPageDao中可以看出,查询表sys_dept_page时查询条件往往包含dept_id和page,已经建立了(dept_id, page)的索引,但通过分析数据库查询日志可以发现有时候会仅通过page来查询,因此需要单独为page添加索引从而加快相关查询语句的效率。

5.sys_module_lang.lang

SysModuleLangDao中可以看出,查询表sys_module_lang时常用的查询条件为module_id和lang,已有索引(module,lang),但是从数据库查询日志中看出存在单独使用lang进行查询的情况,因此需要为lang单独添加索引加快相关查询速度。

6.sys_role_module.module_id

SysRoleModuleDao中可以看出,查询表sys_role_module时常用的查询条件为role_id和module_id,已有索引(role_id,module_id),但是从数据库查询日志中看出存在单独使用module_id进行查询的情况,因此需要为module_id单独添加索引加快相关查询速度。

7.sys_role_user.user_id

SysRoleUserDao中可以看出,查询表sys_role_user时常用的查询条件为role_id和user_id,已有索引(role_id,user_id),但是从数据库查询日志中看出存在单独使用user_id进行查询的情况,因此需要为user_id单独添加索引加快相关查询速度。

8.sys_site.parent_id

SysSiteDao中可以看出,查询表sys_site时常用的查询条件为disabled、parent_id和name,从数据库查询日志中看出存在单独使用parent_id进行查询的情况,因此需要为parent_id单独添加索引加快相关查询速度。

9.sys_user.site_id

SysUserDao中可以看出,site_id为查询sys_user时常用的一个条件,数据库的查询日志的结果也确实如此,因此需要为site_id单独添加索引加快相关查询速度。

解决方法

添加下列索引
cms_content_related.related_content_id
cms_word.site_id
sys_cluster.(heartbeat_date,master)
sys_dept_page.page
sys_module_lang.lang
sys_role_module.module_id
sys_role_user.user_id
sys_site.parent_id
sys_user.site_id

@sanluan
Copy link
Owner

sanluan commented Mar 18, 2020

非常感谢您提交的代码,sys的那几个表索引不够优化对后台使用影响还是挺大的,还希望您长期关注项目

@sanluan sanluan closed this as completed Mar 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants