Что не так с этим триггером в MySQL? - PullRequest
1 голос
/ 23 апреля 2010

Ниже представлен триггер, который мне нужно создать, но он не создается. Пожалуйста, любой приятель может объяснить мне, что не так с этим триггером? Помоги мне, пожалуйста.

DELIMITER $$
 CREATE TRIGGER property_history_update 
 AFTER UPDATE ON `properties`
 FOR EACH ROW BEGIN

 IF OLD.ListPrice != NEW.ListPrice THEN  
    INSERT INTO `property_history` 
      SET ListingKey = OLD.ListingKey,
           ListPrice = NEW.ListPrice,
       ListingStatus = OLD.ListingStatus,
     LastUpdatedTime = NEW.LocalLastModifiedOn;
 END IF;

END$$
DELIMITER ;

Когда я выполнил выше триггер, я получил ошибку, как показано ниже:

Неустранимая ошибка: превышено максимальное время выполнения 300 секунд в /var/www/phpmyadmin/libraries/import/sql.php в строке 99

1 Ответ

2 голосов
/ 12 марта 2011

Прохождение через все строки в свойствах через UPDATE без предложения WHERE будет иметь линейное (O (n) [n - коэффициент количества строк]) время выполнения. Это время может удвоиться, если во всех строках произойдет изменение в ListPrice.

Пример: если вы запустили «ОБНОВИТЬ свойства SET ListPrice = 5;» и в таблице 10 000 строк, будьте уверены, что в таблицу property_history будет 10 000 ОБНОВЛЕНИЙ и до 10 000 ВСТАВЛЕНИЙ.

Пожалуйста, убедитесь, что вы из трех (3) вещей:

  1. массовые обновления не выполняются для таблицы продуктов
  2. не использует предложения WHERE, которые не используют индексы
  3. не использует предложения WHERE, индексы которых игнорируются оптимизатором MySQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...