2012-06-26 3 views
0

У меня есть запрос MySQL, который очень прост, но работает очень медленно. У меня есть две таблицы corporate_main_member и corporate_main_corporate_membership и я бегу следующий запрос:Простой запрос Mysql работает медленно

SELECT m.gender FROM corporate_main_member m, corporate_main_corporate_membership cm where m.id = cm.FK_member_ID and cm.FK_corporation_id = 6 

Когда я не включают в себя второе условие (cm.FK_corporation_id = 6), запрос выполняется в порядке ....

+2

Создайте индекс на FK_corporation_id. –

+0

было бы также интересно узнать, сколько данных в этих двух таблицах? – dom

+0

Что такое «медленный»? Пробовали ли вы использовать подпункты этого запроса и так далее? Это может помочь вам определить, где находится узкое место. –

ответ

1

Использование JOIN ключевых слов в запросе и Создать индекс на FK_corporation_id.

SELECT m.gender 
FROM corporate_main_member m 
     INNER JOIN corporate_main_corporate_membership cm 
       ON m.id = cm.fk_member_id 
WHERE cm.fk_corporation_id = 6 
+0

Большое спасибо. fk_corporation_id - это внешний ключ. Можем ли мы добавить к нему еще один индекс? Я начинаю так сожалеть об этом простом вопросе – user557105

+0

Да, вы можете добавить некластеризованный индекс в любой столбец (на FK в вашем случае), если кластерный индекс (PK) уже определен в таблице. –

+0

добавление индекса не решило проблему. На другом компьютере с той же базой данных запрос выполняется в порядке – user557105

1

Это более эффективная форма вышеуказанного запроса.

SELECT 
m.gender 
FROM corporate_main_member m, 
corporate_main_corporate_membership cm on(m.id = cm.FK_member_ID) 
where cm.FK_corporation_id = 6 

Пока вы можете создать индекс на корпоративном_main_corporate_membership.

0
SELECT 
    m.gender 
FROM corporate_main_member AS m 
    LEFT JOIN corporate_main_corporate_membership AS cm 
ON m.id = cm.FK_member_ID 
    AND cm.FK_corporation_id = 6 
Смежные вопросы