2015-05-03 3 views
2

Этот запрос отлично работает на моей локальной машине-разработчике, но занимает много времени на удаленном сервере и, кажется, тайм-аут сервера с ошибкой 500, есть ли лучший способ написать этот оператор select ?, любой совет будет приниматься во внимание.very Slow Mysql INNER JOIN

Thanx

J

<?php 

$members = new WA_MySQLi_RS("members",$alpha,1); 

$members->setQuery("SELECT 
registration.*, 
child_base_survey.*, 
child_base_scas.*, 
child_base_smqf.*, 
parent_base_survey.*, 
parent_base_ippa.*, 
parent_base_eac.*, 
parent_base_scas.*, 
parent_base_smqf.*, 
parent_base_eval.*, 
user_access_level.*, 
parent_one_month_survey.*, 
parent_one_month_ippa.*, 
parent_one_month_eac.*, 
parent_one_month_eval.*, 
child_three_month_survey.*, 
child_three_month_scas.*, 
child_three_month_smqf.*, 
parent_three_month_survey.*, 
parent_three_month_scas.*, 
parent_three_month_smqf.*, 
parent_three_month_eval.*, 
cron.* 
FROM registration 
INNER JOIN child_base_survey ON registration.rego_parent_uid = child_base_survey.child_base_survey_uid 
INNER JOIN child_base_scas ON child_base_survey.child_base_survey_uid = child_base_scas.child_base_scas_uid 
INNER JOIN child_base_smqf ON child_base_scas.child_base_scas_uid = child_base_smqf.child_base_smqf_uid 
INNER JOIN parent_base_survey ON child_base_smqf.child_base_smqf_uid = parent_base_survey.parent_base_survey_uid 
INNER JOIN parent_base_ippa ON parent_base_survey.parent_base_survey_uid = parent_base_ippa.parent_base_ippa_uid 
INNER JOIN parent_base_eac ON parent_base_ippa.parent_base_ippa_uid = parent_base_eac.parent_base_eac_uid 
INNER JOIN parent_base_scas ON parent_base_eac.parent_base_eac_uid = parent_base_scas.parent_base_scas_uid 
INNER JOIN parent_base_smqf ON parent_base_scas.parent_base_scas_uid = parent_base_smqf.parent_base_smqf_uid 
INNER JOIN parent_base_eval ON parent_base_smqf.parent_base_smqf_uid = parent_base_eval.parent_base_eval_uid 
INNER JOIN user_access_level ON parent_base_eval.parent_base_eval_uid = user_access_level.user_access_level_uid 
INNER JOIN parent_one_month_survey ON user_access_level.user_access_level_uid = parent_one_month_survey.parent_one_month_survey_uid 
INNER JOIN parent_one_month_ippa ON parent_one_month_survey.parent_one_month_survey_uid = parent_one_month_ippa.parent_one_month_ippa_uid 
INNER JOIN parent_one_month_eac ON parent_one_month_ippa.parent_one_month_ippa_uid = parent_one_month_eac.parent_one_month_eac_uid 
INNER JOIN parent_one_month_eval ON parent_one_month_eac.parent_one_month_eac_uid = parent_one_month_eval.parent_one_month_eval_uid 
INNER JOIN child_three_month_survey ON parent_one_month_eval.parent_one_month_eval_uid = child_three_month_survey.child_three_month_survey_uid 
INNER JOIN child_three_month_scas ON child_three_month_survey.child_three_month_survey_uid = child_three_month_scas.child_three_month_scas_uid 
INNER JOIN child_three_month_smqf ON child_three_month_scas.child_three_month_scas_uid = child_three_month_smqf.child_three_month_smqf_uid 
INNER JOIN parent_three_month_survey ON child_three_month_smqf.child_three_month_smqf_uid = parent_three_month_survey.parent_three_month_survey_uid 
INNER JOIN parent_three_month_scas ON parent_three_month_survey.parent_three_month_survey_uid = child_three_month_smqf.child_three_month_smqf_uid 
INNER JOIN parent_three_month_smqf ON parent_three_month_scas.parent_three_month_scas_uid = parent_three_month_smqf.parent_three_month_smqf_uid 
INNER JOIN parent_three_month_eval ON parent_three_month_smqf.parent_three_month_smqf_uid = parent_three_month_eval.parent_three_month_eval_uid 
INNER JOIN cron ON parent_three_month_eval.parent_three_month_eval_uid = cron.cron_uid"); 

?> 
+0

Нужны ли все столбцы таблицы? Если нет, выберите только полезный. – Sherlock

+0

Да, все таблицы необходимы (я думаю), когда при регистрации пользователя происходит установка .uid для каждой таблицы, поэтому я могу делать запросы по всем таблицам и обновлять контент, когда они завершают опросы, я новичок в MYSQL, извините, если это плохой код :-(есть ли способ добавить регистрацию в регистрацию и получить результат mysql? – thewomb

+0

Я имею в виду столбцы, вы выбрали все (регистрация. *, child_base_survey. * и т. д.). – Sherlock

ответ

0

Это очень плохой запрос, конечно, но 500 ошибка не ошибка TimeOut. 500 - Внутренняя ошибка сервера, значит, ваш скрипт зависает после ограничения памяти или сбоя сегментации.

Просмотрите журнал ошибок сервера php для получения дополнительной информации.

+0

Не только memeroy или segfault, есть много причин для 500. – BaBL86

+3

Это большой запрос. Но, структурные проблемы в стороне, это не плохо. – Strawberry

+0

это даже не особенно сложный запрос - если все эти поля объединения индексируются, все должно быть хорошо. –

1

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

+0

здесь установлен LIMIT $ members = new WA_MySQLi_RS («члены», $ alpha, 1); WA_MySQLi_RS ($ name, $ con, $ Max_Rows); – thewomb

+0

Не могли бы вы рассказать нам, сколько строк у вас в каждой таблице. –

+0

приблизительно 100 символов в таблице – thewomb

1

Похоже, что у хостинговой компании возникли проблемы с сервером. следовательно, ошибка 500 и тайм-ауты,

благодарит всех вас за помощь и понимание.

J