MySQL上的慢计数(WITH JOIN)查询

dm7nw8vv  于 2022-10-03  发布在  Mysql
关注(0)|答案(1)|浏览(189)

嗯,我刚到一个项目,对SQL调优不太了解。

我看到一个流程需要很长时间才能运行,于是我开始查看此流程执行的一些查询。

其中一个查询是运行连接的计数,运行时间长达10分钟。

select count(rtvp.id) from rel_transaction_voucher_product rtvp
        join `transaction` t on t.id = rtvp.transaction_id
        join voucher v on v.id = rtvp.voucher_id
        where v.situation_code = 'YYYYY' 
        and t.transaction_type_code = 'XXXX'
        and t.expiration_date < curdate()

查询中每个表的行:

  • REL_TRANSACTION_VOUCHER_PRODUCT:170万
  • 成交:160万
  • 代金券:130万

解释结果:

id|select_type|table|partitions|type  |possible_keys                                                                               |key                                               |key_len|ref                       |rows  |filtered|Extra      |
--+-----------+-----+----------+------+--------------------------------------------------------------------------------------------+--------------------------------------------------+-------+--------------------------+------+--------+-----------+
 1|SIMPLE     |t    |          |ref   |PRIMARY,transaction_type_code,transaction_id_type_date_IDX                                  |transaction_type_code                             |38     |const                     |815765|   33.33|Using where|
 1|SIMPLE     |rtvp |          |ref   |uk_transid_voucherid_productid,voucher_id,rel_transaction_voucher_product_transaction_id_IDX|rel_transaction_voucher_product_transaction_id_IDX|38     |voucherprd.t.id           |     1|   100.0|           |
 1|SIMPLE     |v    |          |eq_ref|PRIMARY,fk_voucher_situation_code                                                           |PRIMARY                                           |38     |voucherprd.rtvp.voucher_id|     1|   45.46|Using where|

我意识到,如果删除and t.expiration_date < curdate(),查询将在大约30秒内返回,但这个条件非常重要。

有没有办法让这个查询运行得更快?

vatpfxk5

vatpfxk51#

WHERE条件中使用的列上添加索引。

ALTER TABLE transaction ADD INDEX (transaction_type_code, expiration_date);

如果您已经在transaction_type_code上有一个索引,那么您将不再需要它,因为它是这个新索引的前缀。

相关问题