2011-12-30 7 views
5

Мы намерены использовать хранимые процедуры mysql для обработки всей работы базы данных для одного проекта. Существует несколько приложений (разных языков), использующих одну и ту же базу данных, и я уверен, что в этих приложениях имеется много повторяющихся SQL-кодов.Как/когда mysql компилирует хранимые процедуры?

А потом, читая что-то о mysq я наткнулся на
http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
статьи в основном говорит, что хранимые процедуры компилируются каждый раз, когда новое соединение БД производится.
Будет ли mysql компилировать ВСЕ (не менее 3 цифр) хранимых процедур в базе данных?

+1

Я бы сказал, что указанная вами статья отвечает на ваш вопрос. – hakre

+1

Да, я бы так сказал. Просто я надеялся, что что-то вроде «О, это не так для версии 5.5 и более поздней версии mysql». – grizwako

+0

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

ответ

5

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

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

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

+0

Базы данных должны быть ослепительно быстрыми. После того как вы оптимизировали свои запросы и дизайн базы данных и индексы, ** как ** еще вы можете оптимизировать его для скорости? – Pacerier

+0

Быстрее аппаратное обеспечение, больше в кэшах памяти, более быстрых жестких дисках, других устройствах хранения. Конечно, это после того, как вы добавили индексы для ускорения запросов и т. Д. Также обратите внимание на блокировки: когда содержимое таблицы изменяется все время, когда оно заблокировано для каждого изменения, тем самым сохраняя запросы. За этим стоит целая наука, и если бы я был вами, я бы поставил перед собой новый вопрос и не добавлял комментарий к 4-летнему ответу, поскольку на этот вопрос много ответов. – Matijs

3

MySQL не будет скомпилировать все хранимые процедуры одновременно. Они будут выполняться по запросу, например, по требованию и при их вызове.

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

Смежные вопросы