diff --git a/test/dz002/REPORT.md b/test/dz002/REPORT.md index b64c6bf..0132fd9 100644 --- a/test/dz002/REPORT.md +++ b/test/dz002/REPORT.md @@ -19,6 +19,7 @@ WHERE users.Name LIKE "ан%" AND users.Surname LIKE "ан%" ORDER BY id ``` +![mountains](img/explain1.jpg "Explain запроса с прямым индексом") ### 3. В случае использования индекса indSurnameName: - #### Запрос на добавление индексов: ``` @@ -38,5 +39,6 @@ WHERE users.Name LIKE "ан%" AND users.Surname LIKE "ан%" ORDER BY id ``` +![mountains](img/explain2.jpg "Explain запроса с обратным индексом") #### 4. РезюмеЖ Для конечной оптимизации используется составной индекс `('Surname', 'Name')` потому, что в запросе используется объединение AND условий LIKE ?%. Mysql в этом случае ищет по составному индексу и объединяет строки без сортировки. Именно поэтому, приходится принудительно сортировать результаты. Порядок полей выбран с точки зрения селективности. В реальной обстановке поле «Фамилия» все же более селективно чем «Имя». Плюс к этому, мы видим в EXPLAIN запроса, что в случае использования индекса `('Surname', 'Name')` mysql применяет Multi-Range Read оптимизацию, позволяющую линеаризовать процедуру чтения с диска. Возможно за этот счет значительно повысилась скорость передачи данных? по сравнению с индексом `('Name', 'Surname')`. \ No newline at end of file diff --git a/test/dz002/img/diagramms.jpg b/test/dz002/img/diagramms.jpg new file mode 100644 index 0000000..113d8c6 Binary files /dev/null and b/test/dz002/img/diagramms.jpg differ diff --git a/test/dz002/img/explain1.jpg b/test/dz002/img/explain1.jpg new file mode 100644 index 0000000..a69c160 Binary files /dev/null and b/test/dz002/img/explain1.jpg differ diff --git a/test/dz002/img/explain2.jpg b/test/dz002/img/explain2.jpg new file mode 100644 index 0000000..a8779f9 Binary files /dev/null and b/test/dz002/img/explain2.jpg differ diff --git a/test/dz003/REPORT.md b/test/dz003/REPORT.md index 80bbcfc..9fcd9b6 100644 --- a/test/dz003/REPORT.md +++ b/test/dz003/REPORT.md @@ -104,7 +104,7 @@ binlog_do_db = app ``` APP_DSN_SLAVE1: mysql_slave1 ``` -- #### Перезапускаем контейнер с приложением (в моем случае, перезапускаются и базу, но для данного эксперимента это не принципиально) и нагружаем ту же страницу тем же запросом, с помощью wrk: +- #### Перезапускаем контейнер с приложением и нагружаем ту же страницу тем же запросом, с помощью wrk: ``` sudo make app-reload sudo docker run --rm -v /root/scripts:/scripts williamyeh/wrk -t1 -c10 -d5m --timeout 30s http://localhost:8080/search -s /scripts/post.lua -- debug true