MySQL оптимизация запросов 100 000 записей с левым внешним объединением - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть таблица клиентов и 100 000 записей в ней.

А также у клиентов есть много связанных таблиц, где хранятся связанные данные.

Мой запрос выглядит так:

SELECT COUNT(DISTINCT `clients2`.`id`) 
  FROM `clients2` as `clients2` 
  LEFT OUTER JOIN `users` as `users` 
    ON (    `clients2`.`user_id`=`users`.`id` 
         and users.status!=5 
         and clients2.status!=5
       ) 
LEFT OUTER JOIN `private_data` as `privateData` 
  ON (    `users`.`person_id`=`privateData`.`id` 
      and clients2.status!=5
     )

Это только 2 соединения, но мой реальный запрос имеет 5-7 соединений. И это очень медленно с 100 000 записей. Около 0,5 сек

Моя база данных очень нормализована. И кажется, что мне нужно денормализовать это сейчас. Или, может быть, кто-нибудь может порекомендовать хорошее решение?

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Я думаю, что вы могли бы использовать некоторые встроенные методы оптимизации Mysql для соединений.

Оптимизация влево и вправо

1 голос
/ 08 декабря 2011

Если БД нормализована, вы, вероятно, можете использовать «нормальное» объединение в запросе. Это должно значительно ускорить процесс.

...