SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.06.2010 13:25:06

youstm
Участник
Зарегистрирован: 24.06.2010
Сообщений: 4

Оптимизация запроса(Поиск и копирование похожих строк)

Добрый день,

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

пример Таблица User

u_id | u_name | u_email
1     | title1    | desc11
2     | title1    |
3     | title2    | desc22
4     | title3    | desc33
5     | title4    | desc44
6     | title4    |

вот что то подобное получилось сделать

UPDATE user q INNER JOIN (SELECT * FROM user WHERE u_name IN (SELECT u_name FROM user GROUP BY u_name HAVING count(u_name)>1)) s SET q.u_email=s.u_email,q.u_pass=s.u_pass WHERE q.u_name=s.u_name AND (q.u_email='' OR q.u_pass='')

всё бы хорошо, НО! при таблице в 2к+ записей этот запрос вешает mySQL. В чём тут беда, не судите строго за запрос я тока учусь.
заранее спс.

Отредактированно youstm (24.06.2010 13:28:23)

Неактивен

 

#2 24.06.2010 14:48:51

youstm
Участник
Зарегистрирован: 24.06.2010
Сообщений: 4

Re: Оптимизация запроса(Поиск и копирование похожих строк)

изменил запрос так:

UPDATE user q INNER JOIN (SELECT * FROM user GROUP BY u_name HAVING count(u_name)>1) s ON (s.u_email!='') SET q.u_email=s.u_email,q.u_pass=s.u_pass WHERE q.u_name=s.u_name AND (q.u_email='' OR q.u_pass='')

SQL выдал следующее: Затронуто строк: 199 (запрос занял 6.5336 сек.)

в таблице было около 7000 записей... ну теперь хоть не завис.. но всё равно мне кажется долго что то 6.5 секунд..

Неактивен

 

#3 24.06.2010 14:53:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация запроса(Поиск и копирование похожих строк)

Ох. Обычно в ON пишут условия связи, это не просто странное место для размещения
WHERE smile

6 секунд — вполне нормальное время для плохого одноразового запроса. Что Вас
смущает?

Неактивен

 

#4 24.06.2010 15:22:02

youstm
Участник
Зарегистрирован: 24.06.2010
Сообщений: 4

Re: Оптимизация запроса(Поиск и копирование похожих строк)

Ох. Обычно в ON пишут условия связи, это не просто странное место для размещения
WHERE smile

Т.е. ON (s.u_email!='') нет смысла так делать?

6 секунд — вполне нормальное время для плохого одноразового запроса. Что Вас
смущает?

да запускается раз в день... а как его сделать не ПЛОХИМ а ХОРОШИМ)))..

Неактивен

 

#5 24.06.2010 15:36:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация запроса(Поиск и копирование похожих строк)

Исправьте приложение, которое вставляет эти строки? Будет куда лучше.

UPDATE user u
JOIN (SELECT u_name, MAX(u_pass) AS u_pass FROM user GROUP BY u_name) uq USING (u_name)
SET u.u_pass = uq.u_pass;

Такому запросу нужен ключик на (u_name, u_pass).

Неактивен

 

#6 24.06.2010 15:58:10

youstm
Участник
Зарегистрирован: 24.06.2010
Сообщений: 4

Re: Оптимизация запроса(Поиск и копирование похожих строк)

MAX(u_pass) выберет строку та что не пустая?

Неактивен

 

#7 24.06.2010 16:45:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация запроса(Поиск и копирование похожих строк)

Проверьте wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson