首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海量SQL语句优化

海量SQL语句优化
EN

Stack Overflow用户
提问于 2015-02-25 21:51:39
回答 1查看 73关注 0票数 2

以下语句在每个查询中运行11到12秒。我试着添加索引和其他东西,但现在我不知道下一步该做什么。

这是codeigniter中的“搜索”。

代码语言:javascript
复制
   SELECT produktlisten.id as id,
          produktlisten.name as name,
          produktlisten.alias,
          users_company.name as company_name,
          produkte.id as produkte_id,
          produkte.name as produkte_name,
          sliderpic,
          produktlisten.description as description,
           MATCH (produktlisten.name,
                  produktlisten.description,
                  produktlisten.tags) AGAINST ('<<SEARCH TERM>>' )
          + MATCH (users_company.name,
                   users_company.description) AGAINST ('<<SEARCH TERM>>' )
          + MATCH (produkte.name,
                   produkte.description,
                   produkte.tags) AGAINST ('<<SEARCH TERM>>' ) AS relevanz
     FROM produktlisten
LEFT JOIN produkte ON produktlisten.id = produkte.produktlisten_id
      AND produkte.active = 1
LEFT JOIN stilrichtung ON produktlisten.stil_id = stilrichtung.id
LEFT JOIN users_company ON produktlisten.company_id = users_company.id
    WHERE produktlisten.active =  '1'
      AND (MATCH (produktlisten.name,
                  produktlisten.description,
                  produktlisten.tags) AGAINST ('<<SEARCH TERM>>')
           OR MATCH (produkte.name,
                     produkte.description,
                     produkte.tags) AGAINST ('<<SEARCH TERM>>')
           OR MATCH (users_company.name,
                     users_company.description) AGAINST ('<<SEARCH TERM>>' ))
 GROUP BY id
 ORDER BY relevanz DESC
 LIMIT 21   

数据库很大,表也很大,每个表都有5-15MB。

感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2015-04-01 03:12:28

我不是一个喜欢MySQL的人,所以我想给你一些提示。如果有什么能用的话就好了。

代码语言:javascript
复制
    SELECT produktlisten.id as id,
          produktlisten.name as name,
          produktlisten.alias,
          users_company.name as company_name,
          produkte.id as produkte_id,
          produkte.name as produkte_name,
          sliderpic,
          produktlisten.description as description,
           MATCH (produktlisten.name,
                  produktlisten.description,
                  produktlisten.tags) AGAINST ('<<SEARCH TERM>>' )
          + MATCH (users_company.name,
                   users_company.description) AGAINST ('<<SEARCH TERM>>' )
          + MATCH (produkte.name,
                   produkte.description,
                   produkte.tags) AGAINST ('<<SEARCH TERM>>' ) AS relevanz
     FROM produktlisten
LEFT JOIN produkte ON produktlisten.id = produkte.produktlisten_id 
LEFT JOIN stilrichtung ON produktlisten.stil_id = stilrichtung.id
LEFT JOIN users_company ON produktlisten.company_id = users_company.id
    WHERE produktlisten.active =  '1' AND produkte.active = 1
      AND (MATCH (produktlisten.name,
                  produktlisten.description,
                  produktlisten.tags) AGAINST ('<<SEARCH TERM>>')
           OR MATCH (produkte.name,
                     produkte.description,
                     produkte.tags) AGAINST ('<<SEARCH TERM>>')
           OR MATCH (users_company.name,
                     users_company.description) AGAINST ('<<SEARCH TERM>>' ))
 GROUP BY id
 ORDER BY relevanz DESC
 LIMIT 21   

或者,如果它来自SQL Server,那么我会试试子查询来限制行数,以获得更好的性能,如下所示。

代码语言:javascript
复制
               SELECT produktlisten.id as id,
          produktlisten.name as name,
          produktlisten.alias,
          users_company.name as company_name,
          produkte.id as produkte_id,
          produkte.name as produkte_name,
          sliderpic,
          produktlisten.description as description,
           MATCH (produktlisten.name,
                  produktlisten.description,
                  produktlisten.tags) AGAINST ('<<SEARCH TERM>>' )
          + MATCH (users_company.name,
                   users_company.description) AGAINST ('<<SEARCH TERM>>' )
          + MATCH (produkte.name,
                   produkte.description,
                   produkte.tags) AGAINST ('<<SEARCH TERM>>' ) AS relevanz
     FROM  
     (
     Select * from produktlisten where active = '1'
      AND (MATCH (produktlisten.name,
                  produktlisten.description,
                  produktlisten.tags) AGAINST ('<<SEARCH TERM>>')
           OR MATCH (produkte.name,
                     produkte.description,
                     produkte.tags) AGAINST ('<<SEARCH TERM>>')
           OR MATCH (users_company.name,
                     users_company.description) AGAINST ('<<SEARCH TERM>>' ))    
     ) produktlisten
LEFT JOIN produkte ON produktlisten.id = produkte.produktlisten_id AND produkte.active = 1
LEFT JOIN stilrichtung ON produktlisten.stil_id = stilrichtung.id
LEFT JOIN users_company ON produktlisten.company_id = users_company.id
 GROUP BY id
 ORDER BY relevanz DESC
 LIMIT 21   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28720755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档