СУБД осень 2012 лекция 6

17
СУБД Лекция 6 Павел Щербинин

Upload: technopark

Post on 16-Jun-2015

133 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: СУБД осень 2012 лекция 6

СУБДЛекция 6

Павел Щербинин

Page 2: СУБД осень 2012 лекция 6

Подсистемы храненияMyISAM

• Блокировка и конкуренция

• Автоматическое исправление

• Ручное исправление

CHECK TABLE mytable и REPAIR TABLE mytable

• Особенности индексирования

Полнотекстовый индекс

• Отложенная запись ключей

DELAY_KEY_WRITE

Page 3: СУБД осень 2012 лекция 6

Подсистемы храненияInnoDB

• Транзакции

• Блокировки на уровне строк

• Кластерные индексы

• Внешние ключи

• Возможны Deadlocks

Page 4: СУБД осень 2012 лекция 6

Подсистемы храненияMemory

• Данные хранятся в памяти и теряются при

перезапуске

• Поддерживают индексы типа HASH

• Не поддерживают TEXT, BLOB, VARCHAR => CHAR

• Используется для

промежуточных таблиц

Page 5: СУБД осень 2012 лекция 6

Подсистемы храненияКритерии выбора

• Транзакции

• Конкурентный доступ

• Резервное копирование

• Восстановление после сбоя

• Специальные возможности

Page 6: СУБД осень 2012 лекция 6

Подсистемы храненияНадежность

Page 7: СУБД осень 2012 лекция 6

Подсистемы храненияПрактические примеры

• Протоколирование

MyISAM, Archive

Отчеты?: репликация, Merge

• Чтение, или в основном чтение

MyISAM

• Обработка заказов

InnoDB

• Распространение на дисках

MyISAM, Compressed MyISAM

Page 8: СУБД осень 2012 лекция 6

Подсистемы храненияСводка (1/2)

Page 9: СУБД осень 2012 лекция 6

Подсистемы храненияСводка (2/2)

Page 10: СУБД осень 2012 лекция 6

Подсистемы храненияСводка (2/2)

Page 11: СУБД осень 2012 лекция 6

ИндексированиеB-tree

Page 12: СУБД осень 2012 лекция 6

Индексирование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)

);

Page 13: СУБД осень 2012 лекция 6

ИндексированиеB-tree (особенности)

Можно:• Поиск по полному значению• Поиск по самому левому префиксу• Поиск по префиксу столбца• Поиск по диапазону значений• Поиск по полному совпадению одной части и

диапазону в другой части• Запросы только по индексуНельзя:• Поиск без использования левой части ключа• Нельзя пропускать столбцы• Оптимизация после поиска в диапазоне

Page 14: СУБД осень 2012 лекция 6

ИндексированиеХЕШ-индексы

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

Page 15: СУБД осень 2012 лекция 6

ИндексированиеХЕШ-индексы

f(‘Arjen’) = 2323f(‘Baron’) = 7437f(‘Peter’) = 8784f(‘Vadim’) = 2458

Ячейка Значение2323Указатель на строку 12458Указатель на строку 47437Указатель на строку 28784Указатель на строку 3

SELECT lname FROM testhash WHERE fname=’Peter’;

Page 16: СУБД осень 2012 лекция 6

ИндексированиеХЕШ-индексы (особенности)

• MySQL не может использовать данные в индексе, чтобы избежать чтения строк

• MySQL не может использовать хеш-индексы для сортировки, поскольку строки в нем не хранятся в отсортированном порядке

• Хеш-индексы не поддерживают поиск по частичному ключу, так как хеш-коды вычисляются для всего индексируемого значения

• Хеш-индексы поддерживают только сравнения на равенство, использующие операторы =, IN() и <=>

• Доступ к данным в хеш-индексе очень быстр, если нет большого количества коллизий

• Некоторые операции обслуживания индекса могут оказаться медленными, если количество коллизий велико

Page 17: СУБД осень 2012 лекция 6

Спасибо за внимание

Павел Щербинин[email protected]