首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化查询

优化查询
EN

Stack Overflow用户
提问于 2012-07-11 16:05:35
回答 3查看 132关注 0票数 0

我有一个查询,可以从数据库中选择任何信息。我将用这个信息来定义商品价格。问题是查询需要3秒才能执行。这一次必须对许多文章进行倍增。

如何优化此查询?在articoli表中有16 330行。

这是查询

代码语言:javascript
复制
SELECT ts_scon, AI_CODICIVA, 
       AI_LIS_EURO1, AI_LIS_EURO2, 
       AI_LIS_EURO3, AI_LIS_EURO4, 
       AI_LIS_EURO5, cl_tipocl
  FROM tabscon, articoli, clienti
 WHERE ts_azienda = 'SRL' 
   AND AI_AZIENDA = 'SRL'
   AND AI_CODIREST = $cod_articolo 
   AND cl_azienda = 'SRL' 
   AND cl_codice = $cod_cliente
   AND ts_codice IN (
        SELECT cl_tabsco 
          FROM clienti 
         WHERE cl_codice = $cod_cliente 
           AND CL_AZIENDA = 'SRL')
   AND ts_grusco IN (
        SELECT ai_grupscon 
          FROM articoli 
         WHERE ai_codirest = $cod_articolo  
           AND AI_AZIENDA = 'SRL')

这是解释的结果。对于没有指数的指标,结果是相同的。

id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra 1|PRIMARY|clienti|const|PRIMARY|PRIMARY|25|const,const_1 使用where,使用join缓冲器3,依赖SUBQUERY articoli,StatoAidx,StatoAidx,StatoAidx,StatoAidx,StatoAidx,StatoAidx空16333维;使用连接缓冲区3,依赖于SUBQUERY的SUBQUERY铰链,StatoAidx,StatoAidx,15向刚体,StatoAidx,StatoAidx,15,Const7311,使用其中2依赖的SUBQUERY,clienti,clienti,const,const

很抱歉点了这么小的订单,但还不实用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-12 07:49:27

就查询而言,最好的方法是。

代码语言:javascript
复制
SELECT ts_scon, a.AI_CODICIVA, 
  a.AI_LIS_EURO1, a.AI_LIS_EURO2, 
  a.AI_LIS_EURO3, a.AI_LIS_EURO4, 
  a.AI_LIS_EURO5, c.cl_tipocl
FROM tabscon t
JOIN articoli a ON ts_azienda = ai_azienda
JOIN articoli a2 ON ts_azienda = a2.ai_azienda AND a2.ai_codirest = $cod_articolo AND a2.ai_grusco = ts_grusco
JOIN clienti c ON ai_azienda = cl_azienda
JOIN clienti c2 ON ai_azienda = c2.cl_azienda AND c2.cl_codice = $cod_cliente AND c2.cl_tabsco = ts_codice
WHERE ts_azienda = 'SRL' 
AND AI_CODIREST = $cod_articolo

尽管如此,我不确定您到底要在这里获得哪些信息;您可能不需要两次连接到这些表上,但如果不了解这些数据,我就无法确定。

票数 0
EN

Stack Overflow用户

发布于 2012-07-11 16:51:17

如果您还没有索引,那么肯定需要一些索引。在不了解您的应用程序的情况下,确定索引的确切位置是一种猜测。话虽如此,还是试着把索引放在

代码语言:javascript
复制
articoli.ai_azienda
articoli.ai_codirest

tabscon.ts_azienda
tabscon.ts_codice

clienti.cl_azienda
clienti.cl_codice

在添加这些索引之前,使用EXPLAIN命令,然后逐个添加它们,然后再次使用EXPLAIN,以查看哪些索引真正起了作用。

另外,您的查询似乎返回$cod_articolo和$cod_clienti的单个值的结果。如果您的业务逻辑是这样工作的,那么您可以尝试使用您的查询,以便它返回特定$cod_clienti的所有文章。查询可能还需要一段时间,但它将返回很多行,而不仅仅是其中的一行。

票数 0
EN

Stack Overflow用户

发布于 2012-07-12 10:22:12

我解决了

代码语言:javascript
复制
SELECT ts_scon, AI_CODICIVA, AI_LIS_EURO1, AI_LIS_EURO2, AI_LIS_EURO3, AI_LIS_EURO4, AI_LIS_EURO5, cl_tipocl
FROM tabscon ts JOIN articoli a ON ts.ts_grusco = a.ai_grupscon, clienti
WHERE ts_azienda = 'SRL' AND AI_AZIENDA = 'SRL' AND AI_CODIREST = $cod_articolo AND cl_azienda = 'SRL' AND cl_codice = 1128
AND ts_codice IN (SELECT cl_tabsco FROM clienti WHERE cl_codice = 1128 AND CL_AZIENDA = 'SRL')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11436779

复制
相关文章

相似问题

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