|
Программирование >> Создание клиентов mysql
Столбцы 443 BIGINT BLOB, TEXT CHA ина) DATE DATETIME DECIMAL (длина, точность) DOUBLE DOUBLE PRECISION ENUM FLOAT FLOA ина) INTEGER LONGBLOB, LONGTEXT MEDIUMBLOB, MEDIUMTEXT MEDIUMINT NUMERIC (длина, точность) REAL SET SMALLINT TIME TIMESTAMP TINYBLOB, TINYTEXT TINYINT VARCHAR ина) YEAR Размерность 8 байтов Длина содержимого 2 байта Указанное число байтов 3 байта 8 байтов Длин 1 байт, если точность равна 0; в противном случае - длин 2 байта 8 байтов 8 байтов 1 байт,если в перечислении менее 255 элементов; в противном случае - 2 байта 4байта 4 байта,если длин <= 24; в противном случае - 8 байтов 4 байта 4 байта Длина -t- 2 байта Длина + 2 байта 3 байта Длин + 1 байт, если точность равна 0; в противном случае - длин + 2 байта 8 байтов 1, 2, 3; 4 или 8 байтов, в зависимости от количества элементов множества 2 байта 3 байта 4 байта Длина + 2 байта 1 байт Длина содержимого + 1 байт 1 байт Как указывалось выше, таблиц ISAM содержат записи фиксированной либо переменной длины. Переход во второй режим осуществляется при наличии столбцов переменной размерности. Значения столбцов типа DECIMAL и NUMERIC хранятся в строковом виде, что позволяет обеспечить точность представления д есятичных чисел. Каждой цифре соответствует один символ, еще по одному символу отводится на знаковый разряд и десятичную точку. Блокировки таблиц В MySQL разрешается явно блокировать таблицы с помощью инструкции LOCK TABLES. Тем неменее не рекомендуется делать это для таблиц тех типов, которые поддерживают транзакции. Блокировки кции - это два разных способа решения проблемы одновременного доступа к таблице, поэтому нужно сделать выбор в пользу одного из них. В зависимости от инструкции могут также применяться неявные блокировки. Например, инструкция UPDATE способна немедленно заблокировать таблицу, запретив доступ к ней другим потокам. Блокировки обоих типов защищены от возникновения тупиковых ситуаций, так что можно не волноваться по поводу отмены той или иной инструкции. Можно заблокировать таблицу таким образом, чтобы разрешить другим потокам обращаться к ней для чтения. Это называется блокировкой чтения. Блокировка записи гарантирует текущему потоку монопольный доступ к таблице. Запросы на чтение откладываются до тех пор, пока не будут сняты все блокировки записи. Эту установку можно изменить с помощью флагов инструкций либо путем задания специальных серверных переменных. Для SQL-инструкций создаются две очереди. Чтобы программа MySQL начала извлекать инструкции из очереди на чтение, очередь на запись должна быть пуста. При наличии флага LOW PRIORITYинструкции DELETE, INSERT и UPDATE помещаются в очередь на чтение, т.е. они получают такой же приоритет, что и инструкции SELECT. Флаг HIGHPRIORITY переводиинструкцию SELECT в очередь на запись. Индексы В MySQL индексы хранятся в виде двоичных деревьев. Деревья перестраиваются по мере вставки записей. Это означает, что каждый индекс вызывает небольшое снижение производительности. Как правило, индексы повышают скорость операций выборки за счет снижения скорости операций записи. Тем не менее наличие индекса еще не гарантирует никакого ускорения. Нужно соотносить их с теми запросами, которые планируется выполнять. Чтобы понять, насколько эффективным окажется тот или иной индекс, пользуйтесь инструкцией EXPLAIN(рассматривается в главе 26, Оптимизация ). Определения индексов хранятся файле, асами индексируемые значения - в файле с расширением YI. Если индексный фай сТвует на момент запуска сервера, он будет автоматически воссоздан. Таким при создании резервных копий можно не заботиться об индексах в целях экономии места. Позднее, в процессе восстановления базы данных, программа MySQL создаст индексы заново на основании схемы таблицы. Индексы 445 Индексы способны повысить производительность инструкций, связанных с поиском залисей. Они ускоряют процесс сравнения столбцов при выполнении операций объединения. Кром того, они помогают находить минимальное и максимальное значения столбца и ускоряют выполнение инструкций SELECT с предложением ORDER BY. Чтобы индекс был задействован, он должен быть указан во всех частях предложения WHERE. Если используется лишь часть индекса, то должен соблюдаться порядок обращения к индексируемым столбцам: слева направо. Для примера рассмотрим таблицу, определение которой приведено в листинге 24.2. CREATE TABLE car ( Make CHAR 1:32) NOT NULL, Model CHAR (32) NOT NULL, Introduced YEAR, PRIMARY Make, Model) У таблицы car имеется составной первичный ключ. В запросе, который показан в листинге 24.3, индекс будет использован, так как столбец Make является самым левым компонентом индекса. SELECT * FROM car WHERE Make=Ford А вот в следующем запросе (листинг 24.4) этого не произойдет, поскольку правило очередности столбцов не соблюдается. SELECT * FROM car WHERE Model=Pinto В листинге 24.5 индекс также зуется, из-за того что самый левый компонент индекса нельзя применить к каждой записи. Если бы в предложении WHERE стоял оператор AND, а не OR, всебыло бы наоборот. SELECT * FROM car WHERE Make=Ford OR Model=Impala
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |