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

优化查询mysql
EN

Stack Overflow用户
提问于 2015-01-07 09:58:26
回答 1查看 46关注 0票数 0

我对一个网站的查询有问题。情况是这样的:

我有三张桌子:

所有文章都有的地方,articoli =

clasart =代码项目和类代码之间的所有匹配-- 32314行

classificazioni =在类代码和类名称之间有所有匹配的地方- 2401行

这是查询

代码语言:javascript
复制
SELECT a.clar_classi , b.CLA_DESCRI 
FROM clasart a JOIN (
SELECT art.AI_CAPOCODI, art.ai_codirest 
FROM (select * from clasart where clar_azienda = 'SRL') a 
JOIN (
    SELECT AI_CAPOCODI, AI_CODIREST,AI_DT_CREAZ, 
        AI_DESCRIZI, AI_CATEMERC, concat(AI_CAPOCODI, AI_CODIREST) as codice, aI_grupscon 
    FROM articoli 
    WHERE AI_AZIENDA = 'SRL' AND AI_CATEMERC LIKE '0101______' AND AI_FLAG_NOW = 0 AND AI_CAPOCODI <> 'zzz' 
) art ON trim(a.CLAR_ARTICO) = art.AI_CODIREST 
JOIN classificazioni b ON a.CLAR_CLASSI = b.CLA_CODICE 
WHERE b.CLA_CODICE LIKE 'AA51__' 
group by CLAR_ARTICO) art ON trim(CLAR_ARTICO) = concat(art.AI_CAPOCODI, art.ai_codirest) 
JOIN classificazioni b ON a.CLAR_CLASSI = b.CLA_CODICE 
WHERE CLAR_AZIENDA = 'SRL' AND CLAR_CLASSI like 'CO____'

运行时间为16秒。时间增加到16秒时加入分类。

你能帮我吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-05-12 12:55:55

使用下面的查询介绍以下索引,然后查询将在一两秒钟内开始运行:

ALTER TABLE articoli ADD INDEX idx_artc_az_cat_flg_cap (AI_AZIENDA, AI_FLAG_NOW, AI_CAPOCODI, AI_CATEMERC);

上面的查询将在articoli表上引入多列索引。索引的工作方式类似于数组的哈希表或键如何工作,以直接标识目标值匹配的行。使用多列将导致比较少的行数。

不要使用trim(a.CLAR_ARTICO):确保在插入之前对值进行裁剪,但不要在加入时进行。这可能导致跳过索引文件,这样连接比较可能会很昂贵。

让我们转到接下来的步骤:

使用以下查询介绍clar_azienda的索引:

ALTER TABLE clasart ADD INDEX idx_cls_az (clar_azienda);

如果art.AI_CODIREST不是主/外键,则需要使用下面的查询在那里引入索引:

ALTER TABLE classificazioni ADD INDEX idx_clsi_cd (CLA_CODICE);

我们差不多完成了,您只需要对CLAR_AZIENDA进行索引,就像我对上面的列进行索引一样。让我还告诉您上一次查询索引列中的内容,以便您可以编写自己的查询。

ALTER TABLE <tableName> ADD INDEX <indexKey (<column to be indexed>);

如果您还存在问题,请告诉我,请记住,您可以在从PhpMyAdmin ( still )或mysql控制台中选择数据库后运行这些查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27816763

复制
相关文章

相似问题

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