SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#26 26.01.2011 18:03:57

vepr85
Участник
Зарегистрирован: 21.01.2011
Сообщений: 18

Re: Помогите ускорить запрос

Суть такова: запрос формируется динамически,т.е. в зависимости от параметров собирается строка, потом я его выполняю, заполняя временную таблицу(КАК ПРИСВОИТЬ ЕЙ ИМЯ, ЧТОБЫ НЕ ВОЗНИКЛО КОНФЛИКТА, ЕСЛИ ПОДОБНАЯ ОПЕРАЦИЯ ЕСТЬ В ДРУГОЙ СЕССИИ?), создаю курсор в другой хранимке, выбирая все записи из временной таблицы и работаю с ними

Неактивен

 

#27 26.01.2011 19:30:01

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

Re: Помогите ускорить запрос

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

Неактивен

 

#28 26.01.2011 19:38:08

vepr85
Участник
Зарегистрирован: 21.01.2011
Сообщений: 18

Re: Помогите ускорить запрос

вот по факту есть запрос:


SET @_sql = CONCAT("SELECT  ca3.operator,ca1.id,
                                 (SELECT MAX(ca2.lastUpdate)
                                           FROM chataudit ca2
                                           WHERE
                                              ca2.operator = ca1.operator AND
                                              ca2.eventType='OP_LOGIN' AND
                                              (ca2.lastUpdate <= ca1.lastUpdate AND ca2.id < ca1.id) AND "
,__begin_time," <= ca2.lastUpdate AND ca2.lastUpdate < ",__end_time,
                                  " ) AS login_time,
                                  ca1.lastUpdate AS logout_time
                                  FROM chataudit ca1,
                                      (SELECT DISTINCT operator FROM chataudit) AS ca3
                                  WHERE
                                       ca1.operator = ca3.operator AND "
,_where,
                                      "ca1.eventType = 'OP_LOGOUT' AND "
                                      ,__begin_time," <= ca1.lastUpdate AND ca1.lastUpdate < ",__end_time,
                                  " ORDER BY ca3.operator, login_time, logout_time;");
 


здесь я хочу создать ВРЕМЕННУЮ таблицу(у меня пока создаётся физическая в базе), потом удалить её
я сделал так


CREATE TABLE tmp_sessions (operator VARCHAR(100),signIn DATETIME,signOut DATETIME);
     
    SET @sqlstatement = CONCAT("INSERT INTO tmp_sessions (operator,signIn,signOut) (",@_sql,")");
    PREPARE sqlstatement FROM @sqlstatement;
    EXECUTE sqlstatement;-- записал данные в таблицу
    DEALLOCATE PREPARE sqlstatement;
   
    CALL sp_get_operator_session_timespanInv(total_session_time,total_sent_msgs,total_recieve_msgs);
   
    DROP TABLE tmp_sessions;

 


думаю что надо создать табличку так


CREATE temporary TABLE tmp_sessions (operator VARCHAR(100),signIn DATETIME,signOut DATETIME);
 


вот только удалять её самому надо или она и так грохнется. И если произойдёт ошибка, будет ли удалена временная таблица?

Спасибо

Неактивен

 

#29 26.01.2011 20:26:22

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

Re: Помогите ускорить запрос

Удалять нужно тогда, когда таблица уже больше не нужна (она занимает
память). При ошибке таблица удалена не будет, а вот при обрыве связи —
будет.

Неактивен

 

#30 26.01.2011 23:35:48

vepr85
Участник
Зарегистрирован: 21.01.2011
Сообщений: 18

Re: Помогите ускорить запрос

так что на случай ошибки делать(таблица в памяти висеть будет?)

Неактивен

 

#31 27.01.2011 03:18:37

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

Re: Помогите ускорить запрос

Ну, если таблица не нужна, то удалить ее. А если нужна, то работать
с ней. Всё зависит от ситуации.

Обработка ошибок вообще хитрая штука. Иногда бывает достаточно
вывести ошибку на экран и завершить приложение (например, для
зачета по программированию), а иногда надо во что бы то ни стало
работать дальше, не смотря на ошибки (например, в ПО самолета).

Неактивен

 

Board footer

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