当前位置: 首页 > 知识库问答 >
问题:

我如何改进这个SQL查询以更快,今天它需要很长时间

金飞
2023-03-14

我需要改进这个sql的执行时间,这是我此刻正在使用的代码。对于小表,它表现良好,在第一个表的参与者,我有一个平均5000个条目。第二个,有6万多个。代码在第一个表中执行搜索,按ID进行筛选,并将与第二个表相同的ID分组,生成单个字符串。

SELECT `participant_name`,` participant cpf`, `participant fone`, GROUP_CONCAT (`idnumber` SEPARATOR ', ')
FROM `participants` to` p`
INNER JOIN` sorteio_18` as`s`
ON s.cpf = p.cpf_participant
GROUP BY `cpf_participante`

第一个表的结构如下

participant_id       INT  11
participant_name     VAR  100
cpf_participant      VAR  14
participant_birthday DATE 
participant_phone    VAR  16
qtd_numbers          INT  3
participant_email    VAR  100
status_transacao     INT  1
payment_form         INT  1
cep_participante     INT  8
lucky                INT  10
city                 VAR  100
uf                   VAR  2
neighborhood         VAR  100
address              VAR  100
number               INT  4 
purchase_date        DATE
order_number         VAR  15
transaction          VAR  100
code                 VAR  100
price_price          DEC  10,2

第二个表是

idnumber           INT 11
fullname           VAR 100
phone              VAR 16
email              VAR 100
cpf                VAR 14
cep                INT 8
participant_id     INT 11
neighborhood       VAR 100
address            VAR 100
active             INT 1

有人能给我一个想法,如何提高这个sql的搜索时间,因为今天生成完整的查询需要10多分钟。欢迎任何建议。

共有1个答案

颛孙嘉石
2023-03-14

对于写入的查询:

SELECT p.participant_name, p.`participant cpf`, p.`participant fone`, 
       GROUP_CONCAT(s.idnumber SEPARATOR ', ')
FROM participants p INNER JOIN`
     sorteio_18 s
     ON s.cpf = p.cpf_participante
GROUP BY p.cpf_participante;

我建议将cpf_partipante定义为主键。然后在sorteIO_18(cpf,idnumber)上有一个索引。

不过,使用起来可能会更快:

select p.*,    -- whatever columns you want
       (select group_concat(s.idnumber separator ', ')
        from sorteio_18 s
        where s.cpf = p.cpf_participante
       ) as idnumbers
from participant p;

这只需要上面描述的sorteIO_18上的索引。

 类似资料:
  • 我有以下PHP代码在Laravel正在执行一个MySql查询: 执行此查询需要很长时间。 我对所排序的列以及其他查询的许多列都有索引。 我该怎么办? 更新: 执行的查询: 结果:

  • 我知道要冬眠。我有一个sql语句 我尝试用createCriteria和HQL实现它。 HQL: 问题是,此HQL的执行时间延长了10倍。并执行许多不必要的查询。我尝试使用注释字符串进行转换,它有了一些改进,但仍然比createCriteria查询长5倍,此外,我无法进行此转换 <代码>列表 版本数据防御

  • 问题内容: 我有一个以datetime为参数的查询,我们观察到的是,如果通过变量提供datetime参数,则执行查询的时间比直接对参数进行硬编码要多2 -3倍,是否有任何原因或解决方案?对此 以下查询大约需要5分钟才能返回结果 虽然作为 它会在10到20秒内返回 我并不总是希望在列上使用索引进行搜索。 按照kevchadders的建议,我看到执行计划有很大的不同。使用日期变量的查询正在执行聚集索引

  • 我有一个查询,我用了很长时间才找到。我在一个有500k行的表的单个分区上运行它。 查询如下所示: 我将其设置为,因此查询返回0行。 此查询大约需要30秒(如果我使用,则需要一分钟)。 当我运行完全相同的查询但使用时,需要2秒。 是什么原因导致查询在使用选择列时花费很长时间,而在使用选择计数(列)时不花费时间? 这是解释的问题 *项目[col0#607] -*过滤器(isnotnull(col1#6

  • 我的Mongo Collection有大约2000个文档。当使用MongoTemplate find()方法和空查询(即我需要集合中的所有文档)和实体类、集合名称时,以列表的形式返回数据需要一分钟以上。有人能帮我让查询返回更快吗??下面是我正在使用的查询。

  • 没有一个参数帮助我们在较短的时间内解决查询。