СУБД осень 2012 лекция 6
-
Upload
technopark -
Category
Documents
-
view
122 -
download
0
Transcript of СУБД осень 2012 лекция 6
СУБДЛекция 6
Павел Щербинин
Подсистемы храненияMyISAM
• Блокировка и конкуренция
• Автоматическое исправление
• Ручное исправление
CHECK TABLE mytable и REPAIR TABLE mytable
• Особенности индексирования
Полнотекстовый индекс
• Отложенная запись ключей
DELAY_KEY_WRITE
Подсистемы храненияInnoDB
• Транзакции
• Блокировки на уровне строк
• Кластерные индексы
• Внешние ключи
• Возможны Deadlocks
Подсистемы храненияMemory
• Данные хранятся в памяти и теряются при
перезапуске
• Поддерживают индексы типа HASH
• Не поддерживают TEXT, BLOB, VARCHAR => CHAR
• Используется для
промежуточных таблиц
Подсистемы храненияКритерии выбора
• Транзакции
• Конкурентный доступ
• Резервное копирование
• Восстановление после сбоя
• Специальные возможности
Подсистемы храненияНадежность
Подсистемы храненияПрактические примеры
• Протоколирование
MyISAM, Archive
Отчеты?: репликация, Merge
• Чтение, или в основном чтение
MyISAM
• Обработка заказов
InnoDB
• Распространение на дисках
MyISAM, Compressed MyISAM
Подсистемы храненияСводка (1/2)
Подсистемы храненияСводка (2/2)
Подсистемы храненияСводка (2/2)
ИндексированиеB-tree
ИндексированиеB-tree (пример)
CREATE TABLE People (last_name varchar(50) not null,first_name varchar(50) not null,dob date not null,gender enum(‘m’, ‘f’) not null,key(last_name, first_name, dob)
);
ИндексированиеB-tree (особенности)
Можно:• Поиск по полному значению• Поиск по самому левому префиксу• Поиск по префиксу столбца• Поиск по диапазону значений• Поиск по полному совпадению одной части и
диапазону в другой части• Запросы только по индексуНельзя:• Поиск без использования левой части ключа• Нельзя пропускать столбцы• Оптимизация после поиска в диапазоне
ИндексированиеХЕШ-индексы
CREATE TABLE testhash (fname VARCHAR(50) NOT NULL,lname VARCHAR(50) NOT NULL,KEY USING HASH(fname)
) ENGINE=MEMORY;
fname lname
Arjen Lentz
Baron Schwartz
Peter Zaitsev
Vadim Tkachenko
ИндексированиеХЕШ-индексы
f(‘Arjen’) = 2323f(‘Baron’) = 7437f(‘Peter’) = 8784f(‘Vadim’) = 2458
Ячейка Значение2323Указатель на строку 12458Указатель на строку 47437Указатель на строку 28784Указатель на строку 3
SELECT lname FROM testhash WHERE fname=’Peter’;
ИндексированиеХЕШ-индексы (особенности)
• MySQL не может использовать данные в индексе, чтобы избежать чтения строк
• MySQL не может использовать хеш-индексы для сортировки, поскольку строки в нем не хранятся в отсортированном порядке
• Хеш-индексы не поддерживают поиск по частичному ключу, так как хеш-коды вычисляются для всего индексируемого значения
• Хеш-индексы поддерживают только сравнения на равенство, использующие операторы =, IN() и <=>
• Доступ к данным в хеш-индексе очень быстр, если нет большого количества коллизий
• Некоторые операции обслуживания индекса могут оказаться медленными, если количество коллизий велико
Спасибо за внимание
Павел Щербинин[email protected]