Чтение онлайн

на главную - закладки

Жанры

MySQL 5.0. Библиотека программиста

Гольцман Виктор

Шрифт:

SELECT <Список столбцов> FROM <Список таблиц>

[WHERE <Условие отбора>]

LIMIT <Количество строк> OFFSET <Сдвиг>;

Так, для получения первой «порции» из 20 товаров выполните запрос

SELECT * FROM Products LIMIT 20 OFFSET 0;

Следующих 20 товаров —

SELECT * FROM Products LIMIT 20 OFFSET 20;

Затем

SELECT * FROM Products LIMIT 20 OFFSET 40;

и т. д.

• Максимально

упростите систему привилегий доступа. Чем сложнее система привилегий, тем больше времени занимает проверка прав доступа при выполнении запросов (а также других SQL-команд). Хорошим решением является разграничение доступа на уровне баз данных и отказ от присвоения привилегий доступа к отдельным таблицам и столбцам. В этом случае контроль действий пользователей не требует обращения к таблицам tables_priv и columns_ priv (см. подраздел «Просмотр привилегий»).

• Если запрос содержит выражение, проверьте, не является ли вычисление этого выражения причиной замедления запроса. Для этого выполните команду

SELECT BENCHMARK(<Количество повторений>,<Выражение>);

Функция BENCHMARK всегда возвращает значение 0, однако в сообщении о результате выполнения команды указывается время ее выполнения, благодаря чему вы можете оценить время вычисления выражения. Например, если ваш запрос включает вычисление синуса для каждой строки таблицы, выполните команду

SELECT BENCHMARK(10000000,SIN(1));

При использовании процессора с тактовой частотой 1,6 ГГц выполнение этой команды займет приблизительно 1 с. Таким образом, программа MySQL способна производить около 10 млн вычислений синуса в секунду, а значит, функция SIN не оказывает существенного влияния на скорость запроса. Итак, мы рассмотрели способы оптимизации таблиц и запросов. В следующем разделе вы узнаете о том, как увеличить быстродействие сервера путем настройки системных переменных.

6.3. Параметры работы сервера

В процессе работы сервер MySQL использует множество буферов (кэшей) различного назначения. Если ваш компьютер располагает достаточной оперативной памятью, вы можете увеличить размеры буферов и тем самым повысить скорость выполнения операций, использующих эти буферы (благодаря уменьшению количества обращений к диску, которые выполняются медленно). В данном разделе мы рассмотрим переменные, которые задают размеры буферов, а также другие переменные, влияющие на производительность сервера.

Узнать текущие значения серверных переменных вы можете с помощью уже знакомой вам команды

SHOW VARIABLES;

Для изменения значения переменной можно использовать команду

SET GLOBAL <Имя переменной>=<Значение>;

однако установленное таким образом значение будет действовать только до момента перезапуска сервера MySQL. Поэтому лучше указать нужные значения переменных непосредственно при запуске сервера MySQL. • Если вы запускаете сервер вручную из командной строки (об этом говорилось в подразделе «Запуск и остановка сервера MySQL из командной строки» главы 1), укажите в команде запуска сервера параметр – <Имя переменной> = <Значение>, например

mysqld-nt –table-cache=256

• Если сервер MySQL был сконфигурирован как сервис Windows и запускается или автоматически, или с помощью панели управления, или с помощью MySQL Administrator (см. подразделы «Запуск и остановка сервера MySQL с помощью MySQL Administrators «Запуск и остановка сервера MySQL с панели управления» главы 1),

откройте конфигурационный файл my.ini, находящийся в папке, где установлена программа MySQL, и добавьте параметр <Имя переменной> = <Значение> в раздел [mysqld] (см. рис. 5.9). Сохраните файл my.ini. Новые значения переменных вступят в действие после перезапуска сервера.

...

Примечание

В корневой папке MySQL вы найдете примеры конфигурационных файлов с различными вариантами настроек системных переменных: my-small.ini, my-medium.ini, my-large.ini, my-huge-ini и my-innodb-heavy-4G.ini.

Установив новые значения переменных, проверьте, как изменилось время выполнения соответствующих операций. Опытным путем можно подобрать размеры буферов, оптимальные для вашей системы.

В табл. 6.2 перечислены наиболее важные параметры, влияющие на производительность сервера.

Таблица 6.2.

Параметры работы сервера

Далее вы узнаете о влиянии блокировок на скорость выполнения операций с таблицами.

6.4. Проблемы, связанные с блокировками

В этом разделе мы рассмотрим только внутренние блокировки, используемые сервером MySQL при совместной работе нескольких потоков с одними и теми же данными, и не коснемся внешних блокировок, обеспечивающих координацию работы сервера MySQL и других программ.

В главах 1 и 2 было отмечено, что в таблицах с типом InnoDB блокировка выполняется на уровне отдельных строк. Для таблиц MyISAM построчная блокировка не поддерживается, и при необходимости таблица блокируется целиком. Преимуществом построчной блокировки является возможность параллельного редактирования данных множеством пользователей. Однако табличная блокировка выполняется быстрее и требует меньшего количества оперативной памяти. Табличные блокировки оказываются предпочтительными в следующих случаях:

• таблица используется главным образом для чтения данных;

• основными операциями в таблице являются запросы и добавление строк, а изменение и удаление данных происходит редко; в этом случае можно выполнять чтение и запись параллельно (об этом будет подробно рассказано ниже);

• в таблице часто выполняются запросы, требующие просмотра всей таблицы (при этом построчные блокировки будут неэффективны).

Рассмотрим подробнее механизм табличных блокировок. В зависимости от типа выполняемой SQL-команды к таблице применяется либо блокировка чтения, либо блокировка записи. Блокировка чтения разрешается, если в данный момент не наложена блокировка записи; несколько блокировок чтения могут применяться одновременно. Блокировка записи разрешается, если в данный момент нет никаких других блокировок. Если блокировка не может быть применена немедленно, она помещается в очередь. После снятия текущей блокировки применяется следующая блокировка из очереди блокировок записи, а если эта очередь пуста, то применяется следующая блокировка из очереди блокировок чтения.

Поделиться:
Популярные книги

Печать Пожирателя

Соломенный Илья
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Печать Пожирателя

Привет из Загса. Милый, ты не потерял кольцо?

Лисавчук Елена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

У врага за пазухой

Коваленко Марья Сергеевна
5. Оголенные чувства
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
У врага за пазухой

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит