mysql - 优化MySQL中的where子句查询

标签 mysql performance pymysql

Using alias of a query to join with another table MySQL

与我之前的问题类似,它不适用于从子查询的结果中给出值 1。因此我将其更改为

select *
from rents r
where
  r.kickscooter_id in
   (select k.id 
    from support_works sw
    join kickscooters k 
      on k.serial_number = sw.serial_number
    join kickscooter_control_units kcu 
      on  kcu.kickscooter_id =  k.id 
        and kcu.particle_product_id in (9358, 9383)   
    where
      sw.work_type = 'deploy' and
      (sw.updated_at between '2019-11-01 02:00:00' and '2019-11-01 10:00:00'));

但现在由于它需要检查每个 r.kickscooter_id,它是否属于子查询的结果列表,所以花费的时间太长。

我该如何优化它。

最佳答案

您可以尝试使用子查询连接 -

select r.*
from rents r
join kickscooters k on k.id = r.kickscooter_id
join support_works sw on k.serial_number = sw.serial_number
join kickscooter_control_units kcu on  kcu.kickscooter_id =  k.id
where kcu.particle_product_id in (9358, 9383)
and sw.work_type = 'deploy'
and sw.updated_at between '2019-11-01 02:00:00' and '2019-11-01 10:00:00'

稍后您可以在以下字段上创建索引以查看差异。

rents(kickscooter_id)
kickscooters(serial_number)
support_works(serial_number, work_type,updated_at)
kickscooter_control_units(kickscooter_id, particle_product_id)

关于mysql - 优化MySQL中的where子句查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58812017/

相关文章:

python - Pymysqlexecute() - 返回值不等于受影响的行数

mysql - 为什么 pymysql 会卡在在 MySQL Workbench 中正常工作的 select 语句上?

mysql绑定(bind)父子关系查询

PHP/mySQLi 不查询

c# - 发送消息速度套接字

javascript - 用于在 javascript 中存储对象的类型化数组

php - 无法检索数据以使用 codeigniter 通过电子邮件发送

mysql - mysql 中的默认日期?

java - 特定类型会影响 ArrayList 的性能吗?

python - 读取 .sql 文件以在 Python 中执行 (pymysql)