Помогите составить сложный SQL-запрос для MySQL. Есть таблица table с полями x и a (x - содержит уникальные значения). И есть заранее известные параметры y, b и c Необходимо найти в таблице запись где x=y. Если такой записи не найдено, то необходимо добавить новую запись, где: x=y и a=b+c. Если запись найдена, то необходимо проверить условие: a>b. Если условие истинно, то не надо ничего делать. Если условие ложно, то необходимо обновить найденную запись: a=b+с. Это все нужно сделать ОДНИМ SQL-запросом, без использования команд языка программирования.
а SP нельзя? так и код будет читабельнее. ---------- Сообщение добавлено 02.09.2011 01:20 ---------- например так:
Кocтя, так уже все и сделано... а вот надо переделать. Вообще, как вы считаете, реально ли мы выиграем в производительности приложения, если засунем это все в один запрос, учитвыая что к приложению идет примерно 500 запросов в секунду и при размере нашей таблицы примерно 1 млн. записей? ---------- Сообщение добавлено 02.09.2011 09:05 ---------- Кocтя, я извиняюсь, не разобрал сначала... подумал что твой код на неком языке программирования. Я так понимаю, что SP - это хранимая процедура? Я с ними не имел дела вообще, хотя и слышал одним ухом. Сейчас у меня же все реализовано на командах языка программирования. Вопрос тогда такой - как отразится на производительности подход с хранимой процедурой? Мне нужно добиться максимальной производительности.
Mikola, я не знаю о преимуществах хранимых процедур в MySQL, но в MS SQL , например, они значительно увеличивают производительность за счет нескольких факторов. http://msdn.microsoft.com/en-us/library/aa214299(v=sql.80).aspx Вы можете ознакомится с преимуществами SP в MySQL, но в любом случае, SP увеличит производительность.
Смотрите в сторону команды: Insert Into T(x,y) On DUBLICATE KEY UPDATE ... только прийдеться вам вводить ключевое поле на таблицу явно.