Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Optimalkan kueri MySql:Terlalu lambat saat memesan

Alih-alih menempatkan Order By ke dalam kueri utama, bungkus, seperti ini:

SELECT * FROM (   
  ... your query
) ORDER BY `created at`

Lihatlah rencana kueri. Anda akan menemukan bahwa dalam kasus Anda, pengurutan dilakukan pada tabel Anda mtrt_items sebelum outer join dilakukan. Dalam penulisan ulang yang saya berikan sebagian, pengurutan diterapkan setelah gabungan luar, dan diterapkan pada set yang jauh lebih kecil.

PERBARUI

Dengan asumsi bahwa LIMIT diterapkan ke kumpulan besar (500.000?), sepertinya Anda dapat melakukan yang teratas sebelum melakukan gabungan apa pun.

SELECT * from (
    SELECT 
    `id`, ... `created_at`, ...
    ORDER BY `i`.`created_at` DESC 
    LIMIT 100 OFFSET 0) as i

    LEFT JOIN `mtrt_users` AS `u` ON i.user_id =u.id

    LEFT JOIN `twt_tweets_content` AS `t` ON t.id =i.id
    LEFT JOIN `twt_users` AS `tu` ON t.user_id = tu.id

    INNER JOIN `mtrt_items_searches` AS `r` ON i.id =r.item_id
    INNER JOIN `mtrt_searches` AS `s` ON s.id =r.search_id
    INNER JOIN `mtrt_searches_groups` AS `sg` ON sg.search_id =s.id
    INNER JOIN `mtrt_search_groups` AS `g` ON sg.group_id =g.id
    INNER JOIN `account_clients` AS `c` ON g.client_id =c.id                

GROUP BY i.id


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara terbaik untuk menyimpan kode html di mysql?

  2. Bagaimana cara menjalankan MySql 8 dengan laravel?

  3. Mysql Select Rows Di mana dua kolom tidak memiliki nilai yang sama

  4. Bagaimana cara memanggil binari C++ saya melalui antarmuka CGI?

  5. Dapatkan durasi sebagai perbedaan cap waktu untuk perubahan lokasi berulang