Академический Документы
Профессиональный Документы
Культура Документы
Lesson 08
Lesson 08
MySQL. Продвинутые
возможности
Содержание вебинара
Содержание вебинара
– полнотекстовый поиск
Содержание вебинара
– полнотекстовый поиск
– пагинация результатов
Содержание вебинара
– полнотекстовый поиск
– пагинация результатов
– транзакции
Содержание вебинара
– полнотекстовый поиск
– пагинация результатов
– транзакции
– кэширование данных
Содержание вебинара
– полнотекстовый поиск
– пагинация результатов
– транзакции
– кэширование данных
– функции даты/времени в MySQL
Полнотекстовый поиск
нестрогий поиск по тексту из базы данных
Проблема поиска текста
Проблема поиска текста
?
Как сделать гибкий поиск по сайту? Чтобы
можно было искать записи по ключевым
словами.
Проблема поиска текста
?
Как сделать гибкий поиск по сайту? Чтобы
можно было искать записи по ключевым
словами.
– Производительность:
MySQL сканирует всю таблице при поиске
Недостатки оператора LIKE
– Производительность:
MySQL сканирует всю таблице при поиске
– Гибкость:
не ищет по нескольким словами, нет операторов поиска
Недостатки оператора LIKE
– Производительность:
MySQL сканирует всю таблице при поиске
– Гибкость:
не ищет по нескольким словами, нет операторов поиска
– Релевантность:
нет способов определить релевантность результатов
Недостатки оператора LIKE
SELECT * FROM gifs
WHERE title LIKE '%слово%' OR description LIKE '%слово%'
Недостатки оператора LIKE
SELECT * FROM gifs
WHERE title LIKE '%слово%' OR description LIKE '%слово%'
Добавление индекса
– Скорость:
ищет в десять раз быстрее LIKE
Возможности полнотекстового поиска
– Скорость:
ищет в десять раз быстрее LIKE
– Гибкость:
ищет по ключевым словам, поддерживает операторы поиска
Возможности полнотекстового поиска
– Скорость:
ищет в десять раз быстрее LIKE
– Гибкость:
ищет по ключевым словам, поддерживает операторы поиска
– Релевантность:
автоматически сортирует результаты по релевантности
Релевантность поиска
Релевантность в поиске – это соответствие найденной информации
ожиданиям пользователя.
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')
Пример обычного поиска
SELECT * FROM gifs
WHERE MATCH(title,description) AGAINST('слово')
Оператор Описание
+ Это слово должно быть представлено в результатах
- Исключение, слова не должно быть в результатах
> Включить и увеличить вес релевантности слова
< Включить и уменьшить вес релевантности слова
() Объединить слова в выражения
~ Убрать значение слова в ранжировании результатов
* Плейсхолдер в конце слова
““ Искать точное соответствие фразе в кавычках
@ Определяет максимальную дистанцию между словами
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description)
AGAINST('слово' IN BOOLEAN MODE)
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description)
AGAINST('слово' IN BOOLEAN MODE)
Поиск по словоформам:
рыба* |
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description)
AGAINST('слово' IN BOOLEAN MODE)
Поиск по словоформам:
рыба* | Название Описание
Рыбак Новая техника рыбалки
Пример логического поиска
SELECT * FROM gifs
WHERE MATCH(title, description)
AGAINST('слово' IN BOOLEAN MODE)
Поиск по словоформам:
рыба* | Название Описание
Рыбак Новая техника рыбалки
Поиск по словоформам:
рыба* | Название Описание
Рыбак Новая техника рыбалки
Смещение выборки
LIMIT 3 OFFSET 0
Выборка записей для одной страницы
LIMIT 3 OFFSET 0
LIMIT 3 OFFSET 3
Выборка записей для одной страницы
LIMIT 3 OFFSET 0
LIMIT 3 OFFSET 3
LIMIT 3 OFFSET 6
Параметры для пагинации
Параметры
Параметры для пагинации
Параметры
9 записей на странице
Параметры для пагинации
Параметры
9 записей на странице
25 записей всего
Параметры для пагинации
Параметры
9 записей на странице
25 записей всего
3 страницы всего
Параметры для пагинации
Параметры
9 записей на странице
25 записей всего
3 страницы всего
Формулы
Параметры для пагинации
Параметры
9 записей на странице
25 записей всего
3 страницы всего
Формулы
LIMIT = записей_на_странице
Параметры для пагинации
Параметры
9 записей на странице
25 записей всего
3 страницы всего
Формулы
LIMIT = записей_на_странице
До
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav
До
gifs
id title fav_count
123 Енотик 19
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav
До
gifs
id title fav_count
123 Енотик 19
gifs_fav
id user_id gif_id
1 5 10
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav
До После
gifs
id title fav_count
123 Енотик 19
gifs_fav
id user_id gif_id
1 5 10
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav
До После
gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20
gifs_fav
id user_id gif_id
1 5 10
Как добавить в избранное?
Что необходимо сделать:
1. Обновить значение fav_count в gifs
2. Добавить запись в gifs_fav
До После
gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20
gifs_fav gifs_fav
id user_id gif_id id user_id gif_id
1 5 10 1 5 10
2 5 123
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
До
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
До
gifs
id title fav_count
123 Енотик 19
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
До
gifs
id title fav_count
123 Енотик 19
gifs_fav
id user_id gif_id
1 5 10
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
До После
gifs
id title fav_count
123 Енотик 19
gifs_fav
id user_id gif_id
1 5 10
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
До После
gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20
gifs_fav
id user_id gif_id
1 5 10
Если что-то пошло не так…
Что произошло:
1. Обновили значение fav_count в gifs
2. Закончилось место на диске
3. Запись в gifs_fav не добавилась
До После
gifs gifs
id title fav_count id title fav_count
123 Енотик 19 123 Енотик 20
gifs_fav gifs_fav
id user_id gif_id id user_id gif_id
1 5 10 1 5 10
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
INITIAL STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
INITIAL STATE
START TRANSACTION
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
INITIAL STATE
START TRANSACTION
UPDATE gifs …
INITIAL STATE
START TRANSACTION
UPDATE gifs …
COMMIT
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
INITIAL STATE
START TRANSACTION
UPDATE gifs …
COMMIT
NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
START TRANSACTION
UPDATE gifs …
COMMIT
NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
UPDATE gifs …
COMMIT
NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
COMMIT
NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
COMMIT
NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
COMMIT ROLLBACK
NEW STATE
Как работают транзакции
Несколько SQL-запросов можно обособить в
один суперзапрос - транзакцию
COMMIT ROLLBACK
Запросы
прошли без
ошибок?
Как работают транзакции
нет Запросы
прошли без
ошибок?
Откатить
транзакцию
ROLLBACK;
Как работают транзакции
нет Запросы да
прошли без
ошибок?
Откатить Подтвердить
транзакцию транзакцию
ROLLBACK; COMMIT;
Использование транзакций в сценариях
Проверяйте результат выполнения SQL запросов, чтобы
подтвердить или откатить транзакцию
Использование транзакций в сценариях
Проверяйте результат выполнения SQL запросов, чтобы
подтвердить или откатить транзакцию
<?php
$con = mysqli_connect("localhost", "root", "", "giftube");
mysqli_query($con, "START TRANSACTION");
$res1 = mysqli_query($con, "UPDATE gifs SET fav_count = fav_count + 1 WHERE id = 2");
$res2 = mysqli_query($con, "INSERT INTO gifs_fav (user_id, gif_id) VALUES (1, 2)");
if ($res1
&& $res2) {
mysqli_query($con, "COMMIT");
}
else {
mysqli_query($con, "ROLLBACK");
}
Перерыв на 10 минут
Кэширование
способ ускорить работу сайта.
Хранение ответов от БД, чтобы уменьшить
количество запросов
Для чего нужно кэширование?
Для чего нужно кэширование?
?
Что делать, если с большой посещаемостью
сайта сложные SQL запросы стали выполняться
слишком долго
Для чего нужно кэширование?
?
Что делать, если с большой посещаемостью
сайта сложные SQL запросы стали выполняться
слишком долго
!
Можно сохранять результаты запросов в
промежуточное хранилище (файлы) и доставать
данные из него.
Что может замедлить SQL запрос
Что может замедлить SQL запрос
Сайт
Как работает кэширование
Без кэширования
Сайт
SQL
Как работает кэширование
Без кэширования
Сайт
SQL
Данные
Как работает кэширование
Без кэширования С кэшированием
Сайт Сайт
SQL
Данные
Как работает кэширование
Без кэширования С кэшированием
Сайт Сайт
SQL SQL
Кэш-функция
Данные
Как работает кэширование
Без кэширования С кэшированием
Сайт Сайт
SQL SQL
Кэш
Кэш-функция
Данные
Как работает кэширование
Без кэширования С кэшированием
Сайт Сайт
SQL SQL
Кэш
Кэш-функция
Данные
Как работает кэширование
Без кэширования С кэшированием
Сайт Сайт
SQL SQL
Кэш
Кэш-функция
Данные Данные
Сформировать SQL запрос
Проверить наличие
данных в кэше
нет Данные да
есть?
Сохранить результат
в кэше
Удалить данные
+ Плюсы
– существенно ускоряет
работу сайта
– не требует апгрейда
– относительно легко
внедрить
Плюсы и минусы кэширования
+ Плюсы - Минусы
cache_save_data
Сохранить данные
Сохраняет данные в
файл и возвращает
путь к нему
Наши функции для кэширования
cache_save_data cache_del_data
cache_save_data cache_del_data
cache_get_data
Получить данные
Возвращает
сохранённые данные
для переданного SQL
запроса
Наши функции для кэширования
cache_save_data cache_del_data
cache_get_data is_cache_expired
Формат по умолчанию
id dt_add title
10 2017-03-29 16:32:34 Жестокий спорт
Форматирование даты в MySQL
SQL предлагает способ для форматирования вывода
дат, содержащихся в записях
Формат по умолчанию
id dt_add title
10 2017-03-29 16:32:34 Жестокий спорт
«Человеческий» формат
id dt_add title
10 29.03.17 16:32 Жестокий спорт
Форматирование даты в MySQL
SQL предлагает способ для форматирования вывода
дат, содержащихся в записях
Формат по умолчанию
id dt_add title
10 2017-03-29 16:32:34 Жестокий спорт
«Человеческий» формат
id dt_add title
10 29.03.17 16:32 Жестокий спорт
Пример запроса
https://up.htmlacademy.ru/php/4/criteries