Java教程

SQL索引优化,菜单列表优化

本文主要是介绍SQL索引优化,菜单列表优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

SQL索引优化,菜单列表优化

现象:
在系统中几个数据量大的列表页面,首次进入页面未增加筛选条件,导致进入的列表查询速度非常慢。
分析:
通过SQL查看,是做了count求和查询,然后根据总的记录数来做分页处理。
查询速度慢的 原因是什么?
  innodb引擎在统计方面和myisam是不同的,Myisam内置了一个计数器,所以在使用 select count(*) from table 的时候,直接可以从计数器中取出数据。而innodb必须全表扫描一次方能得到总的数量。


方法:
方案1:进来的页面是空白,即没有填写查询条件的情况下,列表页为空,根据用户选择的条件来筛选。
方案2:进来的页面列表页的记录数按默认值来处理,比如:默认100条,选择该方案


可以将首次进入的页面,根据时间来倒排,比如:根据今天的时间,在时间的字段上面加上索引。
比如是日志内的数据很大,可以按时间最近3小时内的数据来展示。

通过EXPLAIN来分析索引的使用情况。将需要索引关联的字段加上相应的索引。
在首次进入列表(需要兼容非首次进入的情况,根据查询Request对象的属性来判断),可以越过count查询,count查询统计很慢,可以固定查询100条,然后在前端分页的列表上面,
根据分页前端来做列表数据的分割来展示。

order by 索引列Id desc limit 100

 

//检测是否首次进入列表页面
        boolean firstAccessFlag = false;
        try {
            Field[] reqField = queryReqVO.getClass().getDeclaredFields();
            for (Field field : reqField) {
                field.setAccessible(true);
                if(field.get(queryReqVO) != null){
                    firstAccessFlag = true;
                    break;
                }
            }
        }catch (Exception e) {
            log.error("check queryReqVO exception:",e);
        }

 



这篇关于SQL索引优化,菜单列表优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!