|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.06.2012, 14:57 | #1 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
оптимизация процедуры MySQL
понадобилось создать процедуру на сервере для более быстрого выполнения алгоритма обновления и добавления. прошу посмотреть код на предмет его оптимальности вообще правильности. код работает. из дельфи-программы процедура эта выполняется.
Код:
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
15.06.2012, 18:03 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
С MySQL не работаю, поэтому не помогу. Но есть вопросы на засыпку.
1. Во WHERE SELECT-а есть time<>S2, а во WHERE UPDATE нет этого условия. Почему? UPDATE охватит больший диапазон записей, чем SELECT. 2. Может лучше вообще без SELECT-а UPDATE сделать? Наверно есть после этого возможность узнать (может какая-то @@-переменная по аналогии с MSSQL) - а были ли вообще обновлены записи. И если были - выполнить INSERT 3. Почему для UPDATE PREPARE не используетя, а для INSERT-а используется? Есть какие-то особенности? Хотя снимаю этот вопрос, особенность увидел 4. И как насчет индексов по полям упомянутых во WHERE?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 15.06.2012 в 18:14. |
18.06.2012, 10:31 | #3 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
логика запросов такая, по полям kod, Unitnum, lab, id_param определяется запись так как их комбинация уникальна. далее проверяется изменился ли параметр со времени предыдущего сравнения (time<>S2).
если изменился то обновляем у записи val, time, metka (значение время и метку), а так же добавляем в архивную базу значение параметра. 1. добавлю тогда в апдейт "and time<>S2" вроде не сыграет это погоды ни для времени исполнения запроса ни для увеличения охвата изменений. 2. вот тут не знаю, так как разбираться начал недавно и по книжке, может даже и функция какая есть в MySQL, буду искать. просто подразумевается что часть данных в любом случае меняется в базе и задача процедуры определить есть ли изменения. 3. вообще это задумано из за того что необходимо указывать имя архивной базы потому и INSERT в 3 строки сделан. по другому не нашёл, а этот алгоритм был в книжке как пример. 4. kod, unitnum, id_param (составной индекс), хотя это в данный момент наверное не критично так как таблица подразумевает небольшое количество записей где то не более 3 000 и ещё повторюсь, смысл всей этой процедуры был задуман для оптимизации в программе самопальной на дельфи(что бы было в 1 запрос для 1 записи , ибо это самое долгое место для программы обновления.) которая собирает данные из различных таблиц и складывает в одну кучу записи и создаёт архив для удобного анализа параметров.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Высоконагруженный MySQL. Оптимизация. | Избранный | SQL, базы данных | 7 | 03.07.2012 23:24 |
Триггеры и хранимые процедуры mysql | hit'n'run | Фриланс | 0 | 15.05.2011 14:11 |
Оптимизация стандартной процедуры. | Nicko_mt | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 06.05.2011 03:43 |
ПOМОГИТЕ профи, оптимизация MySQL, есть ли выход??? | kikikiki | SQL, базы данных | 0 | 08.02.2011 22:47 |
Оптимизация баз данных (XML + MySQL) | lord22 | Фриланс | 1 | 17.06.2010 18:11 |