sql >> Databasteknik >  >> RDS >> Mysql

Prestandaskillnad i fråga mellan cmd och workbench mysql

Baserat på Explain-planen kan optimizer inte använda något index för ORDER BY rent . Så prova följande:

  1. Se till att det finns ett index på rent_date kolumnen i rents tabell. Detta index kommer att användas för att optimera ORDER BY klausul. Det kan vara ett enda kolumnindex eller ett flerkolumnindex (används i andra scenarier). Men i händelse av flerkolumn en måste du se till att rent kolumn är den första kolumnen i indexordningen.
  2. Se till att det finns ett index på id kolumnen i kickscooters tabell. Detaljer om index med en kolumn/flerkolumn förblir densamma som i punkt #1.
  3. Se till att det finns ett index på serial_number kolumnen i kickscooter_states_190614 tabell. Detaljer om index med en kolumn/flerkolumn förblir densamma som i punkt #1.

Nu, efter att ha kontrollerat dessa index, prova din ursprungliga fråga. Troligtvis borde optimizer kunna optimera Join Order. Dessutom, ovanstående fråga, kan du genomdriva anslutningsbeställning genom att använda STRAIGHT_JOIN optimeringstips. Så, prova följande fråga också, och jämför mellan de två:

select
  r.user_id,
  k.id as kickscooter_id,
  st_astext(k.location) as location,
  k.created_at,
  k.serial_number,
  k_st.serial_number as states_serial_number,
  st_astext(k_st.gps) as gps_location,
  k_st.gps_updated_at,
  r.start_time,
  r.end_time
from kickscooters k
straight_join rents r
  on k.id= r.kickscooter_id
straight_join kickscooter_states_190614 k_st
  on k.serial_number = k_st.serial_number
order by r.rent_date
limit 999;


  1. 'IF' i 'SELECT'-satsen - välj utdatavärde baserat på kolumnvärden

  2. Infoga array av poster i mysql med Node JS

  3. Facebook user_id :big_int, int eller string?

  4. Hur man kombinerar resultaten av två frågor i SQL