хранимая процедура mysql против скрипта для инструмента командной строки mysql - PullRequest
1 голос
/ 13 октября 2011

Мне нужно сделать много пакетных вычислений, отфильтровать данные, составить сводные таблицы в MySql.

Должен ли я использовать хранимые процедуры или скрипт bash, вызывающий командную строку MySql?

Насколько я могу судить, они примерно эквивалентны, но преимущество bash-скрипта в том, что я могу использовать функции оболочки в качестве макросов для повторного запуска больших операторов с небольшими изменениями.

Под bash-скриптом я имею в виду:

#!/bin/bash
#
arg1=$1
arg2=$2

mysql user pw db << EOF > output.out

  load table ....
  update xx set y = $arg1 if ...
  insert into xxx select a, b, avg(c) from xx group by a, b ...
  quit
EOF

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

where name < 'Run14' 

до

where name regexp 'RunZ23..[A-M]' OR name = 'Run14'

, передав его в качестве аргумента.

Производительность не проблема.

Спасибо тт


Добавлено лет спустя:

Это несколько похоже на вопрос Хранимые процедуры MySQL или код php? . Хотя есть разногласия, многие люди предпочитают PHP, и я чувствую причины, приведенные в Кому нужны хранимые процедуры, в любом случае? хорошие. Теперь я предпочитаю функции PHP вместо хранимых процедур MySql. Конечно, PHP лучше для программирования, чем bash. Главное преимущество, которое я вижу в Stored Procs, - это скорость, и большую часть времени меня это не беспокоит.

11 июля 2012 года я прокомментировал:

Теперь я вижу большое преимущество хранимых процедур в том, что они поддерживают операторы IF, CASE и CURSOR LOOP.

Я имел в виду: вы можете делать эти вещи в Bash, но вы должны выйти из MySql, получить его информацию в переменную оболочки, принять решение и снова запустить MySql для дальнейшей обработки.

Я не думаю, что это является таким преимуществом, если вы используете PHP, потому что в PHP легче преобразовывать результаты SQL в переменные и даже массивы, и вам не нужно открывать новый сеанс для каждого оператора.

Тем не менее, выполнение многих операторов SQL в процедуре может быть намного быстрее, чем в Bash или PHP, особенно при наличии циклов.

1 Ответ

2 голосов
/ 13 октября 2011

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

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

Я действительно не верю, что переменные параметры будут проблемой:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...