查询优化的一些经验

  1、加缓存

  2、list里面需要组装不同的bean,这些bean需要分别查询数据库或缓存,可以查询完之后,建一个5分钟的缓存,下次查,直接从缓存中取

package com.moji.article.web.pattern;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import com.moji.article.service.ArticleService;
import com.moji.article.service.ArticleStatService;
import com.moji.article.web.pattern.ArticleDetailResBean.ArticleResBean;
import com.moji.sns.common.constant.article.ArticleMemcachePoolValues;
import com.moji.util.common.LocaleUtil;

public class ArticleListByIdsStrategyImpl implements ArticleListByIdsStrategy {

    private ArticleDetailStrategy articleDetailStrategy;
    private ArticleService articleService;

    @Override
    public ArticleListByIdsResBean listByIds(ArticleListByIdsReqForm form) {
        ArticleListByIdsResBean resBean = new ArticleListByIdsResBean();
        resBean.setCode(0);

        List<Long> articleIdList = form.getParams().getArticle_id_list();
        Integer lanId = Integer.parseInt(LocaleUtil.getLocaleByLanguageKey(form
                .getCommon().getLanguage()));
        Long snsId = form.getCommon().getSnsid();

        // 查5分钟缓存的memCache是否存在
        List<ArticleDetailResBean.ArticleResBean> articleBeanList = getFromMem();
        if (articleBeanList != null) {
            resBean.setArticle_list(articleBeanList);
            return resBean;
        }

        articleBeanList = new ArrayList<ArticleDetailResBean.ArticleResBean>();
        for (Long articleId : articleIdList) {
            ArticleDetailResBean.ArticleResBean articleBean = articleDetailStrategy
                    .format(articleId, lanId, snsId);
            if (articleBean != null
                    && articleBean.getDel_status().intValue() == ArticleStatService.STAT_NOT_DEL
                            .intValue()) {
                articleBeanList.add(articleBean);
            }
        }
        // 存5分钟缓存
        setToMem(articleBeanList);
        resBean.setArticle_list(articleBeanList);
        return resBean;
    }

    private void setToMem(List<ArticleDetailResBean.ArticleResBean> articleBeanList){
        articleService.setBeanToMem(
                ArticleListByIdsStrategy.ARTICLE_DEATIL_RES_BEAN_KEY,
                ArticleMemcachePoolValues.LATEST_MEMCACHE_POOL_ARTICLE,
                articleBeanList, new Date(1000 * 60 * 5));
    }

    private List<ArticleDetailResBean.ArticleResBean> getFromMem(){
        @SuppressWarnings("unchecked")
        List<ArticleDetailResBean.ArticleResBean> articleBeanList = (List<ArticleResBean>) articleService
                .getBeanFormMemcache(
                        ArticleListByIdsStrategy.ARTICLE_DEATIL_RES_BEAN_KEY,
                        ArticleMemcachePoolValues.LATEST_MEMCACHE_POOL_ARTICLE,
                        List.class);
        return articleBeanList;
    }
    public void setArticleService(ArticleService articleService) {
        this.articleService = articleService;
    }

    public void setArticleDetailStrategy(
            ArticleDetailStrategy articleDetailStrategy) {
        this.articleDetailStrategy = articleDetailStrategy;
    }
}
时间: 2024-10-12 14:23:24

查询优化的一些经验的相关文章

提高mysql千万级大数据SQL查询优化30条经验

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用

提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)

转自http://blog.163.com/zhangjie_0303/blog/static/9908270620146951355834/ 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然

[转]提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用

Mysql千万级大数据查询优化经验 一点课堂(多岸学院)

提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意) 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

Discuz! 的编码规范

http://open.discuz.net/?ac=document&page=dev_coderule 前言 本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形成良好一致的编程风格. 适用范围 如无特殊说明,以下规则要求完全适用于Discuz!项目,同时也可大部分适用于COMSENZ旗下其他PHP项目. 标准化的重要性和好处 当一个软件项目尝试着遵守公共一致的标准时,可以使参与项目的开发人员更容易了解项目中的代码.弄清程序的状况.使新的参与者可以很快的适应环境,防

如何正确合理的建立MYSQL数据库索引

如何正确合理的建立MYSQL数据库索引 索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin

mysql 索引和查询优化

对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找. 例如:假 设存在组合索引it1c1c2(c1,c2),查询语句select * from t1 where c1=1 and c2=2能够使用该索引.查询语句select * from t1 where c1=1也能够使用该索引.但是,查询语句select * f

SQL慢查询优化

原文链接:http://blog.jobbole.com/86594/ MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很

MySQL索引原理及慢查询优化

原文:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”.“SQL语句优化”.“了解数据库原理”等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一