Предлагаю ознакомиться с сервисом от компании Percona, который позволяет правильно настроить конфигурацию MySQL сервера на основе конкретных условий использования и проанализировать используемые SQL-запросы на наличие ошибок и недочетов.



Анализ запросов в данном сервисе — не является заменой команде EXPLAIN, которая ориентирована на анализ производительности запроса, а является скорее дополнением, которое анализирует запрос с точки зрения его синтаксиса.



Информация о компании Percona
Percona is an open source software company specializing in MySQL Support, Consulting, Managed Services, and Training. The company was founded in 2006 by Peter Zaitsev and Vadim Tkachenko[1][2] and is headquartered in Durham, North Carolina. The company launched a MySQL Backup Service in June 2014 as part of its Managed Services.[3] The company contributes to the MySQL community through its blog site, the MySQL Performance blog.[4] The company also hosts annual MySQL user conferences[5] named «Percona Live» in Silicon Valley and London. The company's founders have also published the O'Reilly book «High Performance MySQL».[6]


После регистрации на сайте по адресу https://tools.percona.com, Вам становятся доступными два сервиса:
«Configuration wizard» и «Query adviser». Рассмотрим их подробнее

Configuration wizard — позволяет на основе пошагового опроса (всего 7 шагов) получить готовую конфигурацию my.cnf в которой учтены именно ваши условия работы.

Пример экрана с запросом:



Так выглядит экран с итоговой конфигурацией (на скриншоте часть my.cnf файла):



Query adviser — позволяет указав SQL запрос получить рекомендации по его оптимизации с точки зрения синтаксиса (еще раз подчеркну, что сервис не анализирует план выполнения запроса ввиду отсутствия данных о конфигурации сервера и наличия индексов).

Пример запроса:

SELECT 
   p.shopId, 
   p.typeId,  
   MIN(p.price) AS price
FROM 
  modelPrice p, 
  modelItem i 
WHERE 
  p.modelItemId = i.id AND 
  i.modelId = '5250' AND 
  p.price > 0
GROUP BY 
  p.shopId, 
  p.typeId


Рекомендации сервиса:



и более развернуто



Все конфигурации и анализы SQL-запросов сохраняются в dashboard для последующего анализа и использования.

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

Комментарии (8)


  1. noder
    19.12.2015 23:19
    +2

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


    1. noder
      20.12.2015 09:45
      +3

      Кстати когда я пришёл в мир MySQL из Oracle, я не мог поверить что в SELECT части можно указывать поля, которые не участвуют в группировке или не используются в аггрегирующих функциях. Но ничего, со временем втянулся.


  1. Borz
    20.12.2015 00:39
    +3

    удаление «AS» повышает риск появления ошибки (например в случае пропущенных запятых). Лучше лишний раз написать «AS», чем потом выискивать ошибку. Это я к тому, что в правиле ALI.001 я бы сделал инверсию — рекомендовать написать «AS», чем рекомендовать его убрать.


    1. Lisio
      20.12.2015 02:29
      +3

      Там как раз рекомендуется всегда писать с AS.


      1. Borz
        20.12.2015 02:37
        +1

        да, правда ваша — не так прочитал рекомендацию.


  1. maxic
    20.12.2015 01:17

    Я конечно долго возился с этим запросом, получился он «монстрообразным» (по другому сделать было не реально), но…
    You're awesome! We couldn't find any problems with this query.
    Обратите внимание на сам запрос

    http://easycaptures.com/fs/uploaded/1053/4342879889.png

    Даже как то странно :)
    Я его считал что он «не очень»


    1. maxic
      20.12.2015 01:26

      Хотя соглашусь наверно с сервисом — лучше его составить для этой задачи было наверно не реально
      Выполняется он кстати очень быстро (несмотря на свой «монстрообразный вид») и EXPLAIN показывает везде Using where; Using index и т.п.


    1. duzorg
      20.12.2015 19:21

      «Монстрообразность» этого запроса повышается, ввиду присутствия подчеркиваний орфографии, отсутствия подсветки синтаксиса и невозможностью копирования :)