|
|
|
| есть три таблицы tabl1, tabl2 и tabl3
таблицы tabl1 и tabl2 связвнны полем ID
таблицы tabl2 и tabl3 связанны полем ID_2
также известно что таблица tabl3 может (но не обязательно) содержать огромное количество записей
удаление какой-либо записи из таблицы tabl1 ведёт за собой удаление записей из таблиц tabl2 и tabl3, удаление происходит снизу вверх, т.е. сначало удаление происходит в таблице tabl3 потом в tabl2 и в конце в tabl1 (связь таблиц не нарушается при каком-либо сбое)
вопрос: стоит ли исползовать тип таблиц для поддержки транзакций для данного случая?
PS пока задавал вопрос сам на него себе и ответил, но всё-таки хочется услышать стороннее мнение и возможно рассуждения по данному поводу. | |
|
|
|
|
|
|
|
для: Crux
(23.04.2006 в 14:42)
| | Если вы будете использовать транзакции, то вынуждены будете использовать таблицы типа InnoDB - а в них реализовано каскадное удаление данных, т.е. удаляя запись из одной таблицы у вас автоматически удаляются записи из связанных таблиц. Т.е. транзакции вроде как и не нужны всё будет в один запрос удаляться, а при использовании таблиц типа MyISAM транзакции вообще говоря нужны, но они не реализованы для этого типа таблиц. | |
|
|
|
|
|
|
|
для: cheops
(23.04.2006 в 17:47)
| | Вот-вот...
и какой тип таблицы выбрать?
InnoDB где транзакции есть, но они не нужны или MyISAM где транзакций нет, но там-то они и нужны.
Можно краткую сравнительную характеристику? | |
|
|
|
|
|
|
|
для: Crux
(23.04.2006 в 18:28)
| | База данных в MySQL организуется как поддиректория каталога mysql/data. Таблицы базы данных организуются как файлы данной директории. Каждая MyISAM-таблица хранится на диске в трех файлах, имена которых совпадают с названием таблицы, а расширение может принимать одно из следующих значений:
- frm — содержит структуру таблицы, в файле данного типа хранится информация об именах и типах столбцов и индексов;
- MYD — файл, в котором содержатся дынные таблицы (MYData);
- MYI — файл, в котором содержатся индексы таблицы (MYIndex).
Таблицы MyISAM обладают рядом особенностей.
- Данные хранятся в кросс-платформенном формате, это позволяет переносить базы данных с сервера непосредственным копированием файлов, минуя промежу-точные форматы.
- Максимальное число индексов в таблице составляет 64 (32 до появления вер-сии 4.1.2). Каждый индекс может состоять максимум из 16 столбцов. Начиная с версии 5.1 можно увеличить число индексов в таблице до 128 при помощи пара-метра --with-max-indexes=N.
- Начиная с версии MySQL 4.1, для каждого из текстовых столбцов может быть назначена своя кодировка.
- Допускается индексирование текстовых столбцов, в том числе и переменной длины.
- Поддерживается полнотекстовый поиск.
- Каждая таблица имеет специальный флаг, указывающий правильность закрытия таблиц. Если сервер останавливается аварийно, то при его повторном старте неза-крытые флаги сигнализируют о возможных сбойных таблицах, сервер автомати-чески проверяет их и пытается восстановить.
- Расширенная поддержка кодировок.
К особенностям таблиц InnoDB относят следующие.
- В отличие от MyISAM и BDB, таблицы для InnoDB не создаются в базах данных и для каждой из таблиц не выделяется отдельного файла данных. Исключение — файл определения с расширением frm, который все же создается (по умолчанию в базе данных test). Все таблицы хранятся в едином табличном пространстве, по-этому имена таблиц должны быть уникальными.
- Хранение данных в едином табличном пространстве позволяет снять ограниче-ния на объем таблиц, т. к. файл с таблицами может быть разбит на несколько час-тей и распределен по нескольким дискам или даже хостам.
- Данный тип таблиц поддерживает автоматическое восстановление после сбоев.
- Обеспечивается поддержка транзакций.
- Это единственный тип таблиц в MySQL, поддерживающий внешние ключи и каскадное удаление.
- Выполняется блокировка на уровне отдельных записей.
- Расширенная поддержка кодировок.
- Таблицы типа InnoDB надёжнее MyISAM и рушатся при достижении объёма в несколько гигабайт, однако заметно уступают в скорости MyISAM (иногда в ра-зы) и не поддерживают полнотекстовый поиск. | |
|
|
|
|
|
|
|
для: cheops
(23.04.2006 в 20:40)
| | т.е. если я правильно понял,
при суммарном объёме таблиц в несколько сот метров, выбор между InnoDB и MyISAM сводится к особенностям этих типов? | |
|
|
|
|
|
|
|
для: Crux
(23.04.2006 в 21:04)
| | Э... не понял вопрос. | |
|
|
|
|
|
|
|
для: cheops
(23.04.2006 в 23:32)
| | если записей в таблице будет около 3000 - 5000 , разница в скорости обработки запросов будет заметна или нет? | |
|
|
|
|
|
|
|
для: Crux
(24.04.2006 в 20:23)
| | Если проиндексировать столбцы, то не очень... | |
|
|
|