Мне нужно сделать много пакетных вычислений, отфильтровать данные, составить сводные таблицы в 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, особенно при наличии циклов.