Быстрее MySQL Queries? - PullRequest
       2

Быстрее MySQL Queries?

0 голосов
/ 06 июля 2010

На моей работе у меня есть несколько таблиц с более чем 200 000 строк данных. Мне нужно настроить несколько запросов, которые смотрят более 15 000+ за раз, поэтому иногда я получаю эту ошибку:

Неустранимая ошибка PHP: максимальное выполнение превышено время 180 секунд

Итак, как мне ускорить более быстрые запросы?

Запрос выглядит так:

SELECT  toemail, toname
FROM    email_sent
WHERE   companyid = '$member[companyid]'

Спасибо.

Ответы [ 4 ]

5 голосов
/ 06 июля 2010

Создать индекс для email_sent (company_id):

CREATE INDEX ix_emailsent_companyid ON email_sent (company_id)
1 голос
/ 06 июля 2010

Оптимизация может быть ответом. Если этого недостаточно, вы всегда можете просто увеличить ограничение времени PHP.

Это установит его только для этого скрипта:

set_time_limit docs

Установите количество секунд, в течение которого скрипт разрешено бежать. Если это достигнуто, скрипт возвращает фатальную ошибку. ограничение по умолчанию составляет 30 секунд или, если оно существует, значение max_execution_time определено в php.ini.

Или отредактируйте php.ini и измените настройку max_execution_time . Это изменит это глобально, конечно. Похоже, он уже настроен (вашим системным администратором?) По умолчанию 30 секунд.

0 голосов
/ 06 июля 2010

Первое, на что вы можете обратить внимание - это индексирование любых столбцов, участвующих в запросе. Например, если ваш запрос всегда проверяет значение столбца FirstName, вы можете проиндексировать его.

Если вы предоставите сценарий DDL (язык определения данных) или описание таблиц, а также запросы, которые занимают так много времени, возможно, мы сможем предоставить более полезные советы по индексации.

Если вы уже настроили столько, сколько можете, и у вас все еще есть тайм-ауты, вы можете посмотреть, можете ли вы увеличить лимит времени транзакции. Я не знаю достаточно о настройке вашего сервера, чтобы сообщить подробности, но такие вещи обычно возможны.

UPDATE

Если ваш запрос:

SELECT toemail,toname FROM email_sent WHERE companyid  = '$member[companyid]' 

Мой первый вопрос: есть ли у вас индекс на companyid, а если нет, то улучшается ли его создание?

0 голосов
/ 06 июля 2010

Добавление индекса, если вы еще этого не сделали.Другой способ - переключиться с MyISAM на InnoDB.

...