我对一个网站的查询有问题。情况是这样的:
我有三张桌子:
所有文章都有的地方,articoli =
clasart =代码项目和类代码之间的所有匹配-- 32314行
classificazioni =在类代码和类名称之间有所有匹配的地方- 2401行
这是查询
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秒时加入分类。
你能帮我吗?谢谢
发布于 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控制台中选择数据库后运行这些查询。
https://stackoverflow.com/questions/27816763
复制相似问题