sql >> Database teknologi >  >> RDS >> Mysql

Optimer MySql-forespørgsel:For langsom ved bestilling

I stedet for at placere Order By ind i hovedforespørgslen, pak den, sådan:

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

Tag et kig på forespørgselsplanen. Du vil opdage, at i dit tilfælde udføres sorteringen på din tabel mtrt_items før den ydre sammenføjning udføres. I den omskrivning, jeg delvist har leveret, anvendes sorteringen efter de ydre sammenføjninger og anvendes på et meget mindre sæt.

OPDATERING

Hvis vi antager, at LIMIT anvendes på et stort sæt (500.000?), ser det ud til, at du kan udføre toppen, før du udfører nogen af ​​joinforbindelserne.

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. Sådan eksporteres data fra SQL Server 2005 til MySQL

  2. 'DbContextOptionsBuilder' indeholder ikke en definition for 'UseSqlServer'

  3. Indsættelse af data fra frontend til mysql db i angularjs

  4. Sådan kører du et SQL Plus-script i PowerShell