Ответ 1
Через некоторое время я почти уверен, что это не имеет никакого значения, первое решение может быть даже немного медленнее, но в не измеримом измерении.
Первое намерение состояло бы в том, что первое решение быстрее, потому что вы сначала извлекаете данные по id и обновляете, только если это необходимо.
Но MySQL внутренне ничего не делает в инструкции UPDATE .. JOIN
, только внутренне и в результате этого, вероятно, более эффективно.
Ваше первое решение не поймает случай по умолчанию - что произойдет, если я не получу WORKER
или BOSS
?
Также ваше время исполнения (0.09s) чрезвычайно велико, что пока не объясняется тем, что я знаю о вашей базе данных.
Вы установили какой-либо индекс?
EDIT:
После просмотра структуры которую вы разместили здесь У меня есть предложения по улучшению самой структуры.
1. Используйте тип int
, когда вы храните integer values
. База данных может обрабатывать целостный путь более эффективно
2. Зачем генерировать SSN
самостоятельно? Использование auto_increment
на PRIMARY KEY
намного проще в обработке и сэкономит вам много работы при добавлении новых сотрудников
ALTER TABLE `Employee`
CHANGE `SSN` `SSN` int(11) NOT NULL AUTO_INCREMENT ,
CHANGE `MSSN` `MSSN` int(11) DEFAULT NULL,
ADD KEY `KEY_Employee_MSSN` ( `MSSN` );
3. Используете ли вы имя для поиска? Если это так, оно также должно быть уникальным.
ALTER TABLE `Employee`
ADD UNIQUE KEY `UNI_KEY_Employee` ( `name` );
4. Есть ли у вас фиксированный диапазон обозначений? enum заставляет вход быть одним из определенных значений
ALTER TABLE `Employee`
CHANGE `designation` `designation` ENUM( 'BOSS', 'WORKER' ) NOT NULL DEFAULT 'WORKER',
ADD KEY `KEY_Employee_designation` ( `designation` );
Окончательная структура
mysql> EXPLAIN `Employee`;
+-------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+---------+----------------+
| SSN | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(64) | YES | UNI | NULL | |
| designation | enum('BOSS','WORKER') | NO | MUL | WORKER | |
| MSSN | int(11) | YES | MUL | NULL | |
+-------------+-----------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)