Какое обновление быстрее при использовании соединения или последовательного?

Этот вопрос в последовательности моегопредыдущийВопрос требуется обновить ту же таблицу при удалении строки.

Я мог бы написать два решения, используяХранимая процедура вместо триггера или вложенного запроса.

Оба используют вспомогательную функциюmy_signal (MSG).

Хранимая процедура удаления сотрудника изEmployee Таблица.

Первое решение: использоватьUPDATE строки в таблице,без операции соединения:
CREATE PROCEDURE delete_employee(IN dssn varchar(64))
BEGIN
    DECLARE empDesignation varchar(128);
    DECLARE empSsn         varchar(64);
    DECLARE empMssn        varchar(64);
     SELECT SSN, designation, MSSN  INTO empSsn, empDesignation, empMssn 
     FROM Employee 
     WHERE SSN = dssn;

   IF (empSsn IS NOT NULL) THEN
    CASE       
           WHEN empDesignation = 'OWNER' THEN 
               CALL my_signal('Error: OWNER can not deleted!');

           WHEN empDesignation = 'WORKER' THEN 
            DELETE FROM Employee WHERE SSN = empSsn;               

           WHEN empDesignation = 'BOSS' THEN 
               BEGIN 
                   UPDATE Employee
                   SET MSSN = empMssn
                   WHERE MSSN = empSsn;

                DELETE FROM Employee WHERE SSN = empSsn;                   

               END;
    END CASE;
   ELSE 
               CALL my_signal('Error: Not a valid row!');
   END IF;
END//  
Второе решение: как мне было предложено в моем предыдущем вопросе, используяINNER JOIN
CREATE PROCEDURE delete_employee(IN dssn varchar(64))
BEGIN
    DECLARE empDesignation varchar(128);
    DECLARE empSsn         varchar(64);
    DECLARE empMssn        varchar(64);
      SELECT SSN, designation, MSSN  INTO empSsn, empDesignation, empMssn 
      FROM Employee 
      WHERE SSN = dssn;

   IF (empSsn IS NOT NULL) THEN
       IF (empDesignation = 'OWNER') THEN 
        CALL my_signal('Error: OWNER can not deleted!');
       END IF;

       UPDATE `Employee` A INNER JOIN `Employee` B ON A.SSN= B.MSSN
       SET B.MSSN = A.MSSN WHERE A.SSN = empSsn;

       DELETE FROM `Employee` WHERE SSN = empSsn;
   ELSE 
       CALL my_signal('Error: Not a valid row!');
   END IF;    
END//

Я читаюВот что использование соединения эффективно для Efficient SELECT. Но моя проблема включает в себя только одну таблицу, и я считаю, что мое решение (первое) гораздо эффективнее второго, потому что объединение будет потреблять память сравнительно.

Пожалуйста, предложите мне, что лучше и эффективнее, еслиEmployee table достаточно большой.Что лучше для меня? причина

РЕДАКТИРОВАТЬ: Я проверил, что небольшая таблица состоит из 7 строк, и оба решения занимают одно и то же время.

mysql> CALL delete_employee(4);
Query OK, 1 row affected (0.09 sec)

Я знаю, что функция SQL ведет себя недетерминированно, потому что таблица эвристическая. Какой выбор лучше? Либо, если у вас есть представление о том, как можно оптимизировать запрос.

Ответы на вопрос(1)

Ваш ответ на вопрос