11
回答
mysql数据库中记录超过5万的时候查询很慢,会报内存溢出
注册华为云得mate10,2.9折抢先购!>>>   
mysql数据库中记录超过5万的时候查询很慢,会报内存溢出,有什么好的解决方法吗?
举报
一骑江山
发帖于4年前 11回/2K+阅
共有11个答案 最后回答: 4年前

sql或代码段和表结构贴出来,一般先做sql和程序上的优化,然后才是Mysql性能参数设置,系统环境,硬件配置。

引用来自“guyson”的评论

sql或代码段和表结构贴出来,一般先做sql和程序上的优化,然后才是Mysql性能参数设置,系统环境,硬件配置。

protected void innerProcess(CrawlURI curi){
...
...
...
    Project p = crawler.getProjectByURI(curi);
        if (p!=null) {            
            crawler.downloadProjectPage(curi,p);
            logger.info("Processed p# " +p.getId()+ " " +p.getName());
            }
...
...
...
}
//通过url从数据库中获取project
public Project getProjectByURI(CrawlURI curi) throws Exception {
        String hql = "from Project p where p.url = ?";
        List<Project> list = (List<Project>) hs.doHQL(hql, curi.toString(),
                false);
        if (list != null && list.size() > 0) {
            logger.info(list.get(0));
            return list.get(0);
        }

        return null;
    }
//查询语句处理
public List<?> doHQL(String hql, String value, boolean lockForUpdate) throws Exception {
            List<?> results = null;
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            Query query = session.createQuery(hql).setString(0,value);
            if (lockForUpdate) {
                query.setLockMode("foo", LockMode.PESSIMISTIC_WRITE);
            }
            results = query.list();
            tx.commit();
            session.close();
            return results;
    }

//通过url取html
public boolean downloadProjectPage(CrawlURI curi, Project p)
            throws Exception {
        String html = "";
        html = curi.getHttpRecorder().getReplayCharSequence().toString();
        if (html != null) {
            p.setHtml(html);
            p.setTimestamp(new Date());
            hs.updateTuple(p);
        }

public <T> boolean updateTuple(T tuple) throws Exception {

        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.update(tuple);
        tx.commit();
        session.close();        
        return true;

    }

顶部