Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 один ADOConnection - два ADOQuery - это нормально  [new]
welcometo
Member

Откуда:
Сообщений: 21
Критично ли использовать одно и то же соединение двумя объектами ADOQuery?
т.е. в одной функции у меня 2 объекта Query будут вынимать данные из базы. не будет ли каких ошибок связанных с этим? или лучше для такого случая сделать два ADOConnection?
5 авг 11, 07:34    [11074154]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Да хоть сто кверий в коннекции...
5 авг 11, 07:36    [11074156]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
welcometo
Member

Откуда:
Сообщений: 21
Спасибо что откликаетесь)
еще вопрос, правда по предыдущей теме:
для одного Грида я достаю данные вот так:
const SQL_STRING = 'SELECT * FROM groups WHERE idgroup IN (SELECT idgroup FROM relations WHERE idstudent = :id )';
Для другого Грида достаю данные вот так:
const SQL_STRING = 'SELECT * FROM groups WHERE idgroup NOT IN (SELECT idgroup FROM relations WHERE idstudent = :id )';
т.е. все те данные что не вошли в 1ый запрос, будут получены через второй. чувствую, что можно сделать красивее. только как?
5 авг 11, 07:41    [11074164]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908

Не нормально, один ADOConnection - двадцать ADOQuery вот это нормально,
только причем тут SQL Сервер?


Posted via ActualForum NNTP Server 1.4

5 авг 11, 07:41    [11074165]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
welcometo
Критично ли использовать одно и то же соединение двумя объектами ADOQuery?
т.е. в одной функции у меня 2 объекта Query будут вынимать данные из базы. не будет ли каких ошибок связанных с этим? или лучше для такого случая сделать два ADOConnection?


Это не только нормально, но и правильно.
А если у вас будет не 2-а квери, а 100, будете для этого коннекты плодить?
5 авг 11, 07:42    [11074166]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
Raoul
Member

Откуда:
Сообщений: 177
welcometo
Спасибо что откликаетесь)
еще вопрос, правда по предыдущей теме:
для одного Грида я достаю данные вот так:
SELECT * FROM groups WHERE idgroup IN (SELECT idgroup FROM relations WHERE idstudent = :id)
Для другого Грида достаю данные вот так:
SELECT * FROM groups WHERE idgroup NOT IN (SELECT idgroup FROM relations WHERE idstudent = :id )
т.е. все те данные что не вошли в 1ый запрос, будут получены через второй. чувствую, что можно сделать красивее. только как?

По опыту, IN и NOT IN на больших объёмах сильно тормозят. Как правило, быстрее сделать через EXIST:
SELECT * FROM groups AS g WHERE EXIST(SELECT 1 FROM relations AS r WHERE r.idgroup=g.idgroup AND r.idstudent = :id)
SELECT * FROM groups AS g WHERE NOT EXIST(SELECT 1 FROM relations AS r WHERE r.idgroup=g.idgroup AND r.idstudent = :id)
5 авг 11, 11:04    [11074919]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
Raoul
Member

Откуда:
Сообщений: 177
Raoul
EXIST

EXISTS, конечно же
5 авг 11, 11:08    [11074947]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
welcometo
т.е. все те данные что не вошли в 1ый запрос, будут получены через второй
C чего Вы это взяли?
Это в корне неверное утверждение.
5 авг 11, 11:16    [11075025]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Raoul
SELECT * FROM groups WHERE idgroup IN (SELECT idgroup FROM relations WHERE idstudent = :id)

По опыту, IN и NOT IN на больших объёмах сильно тормозят. Как правило, быстрее сделать через EXIST:
SELECT * FROM groups AS g WHERE EXIST(SELECT 1 FROM relations AS r WHERE r.idgroup=g.idgroup AND r.idstudent = :id)

а разве не одинаковый план получится? под большими объемами подразумевается содержимое groups или то что внутри IN окажется?
5 авг 11, 11:18    [11075043]     Ответить | Цитировать Сообщить модератору
 Re: один ADOConnection - два ADOQuery - это нормально  [new]
Raoul
Member

Откуда:
Сообщений: 177
Shakill
а разве не одинаковый план получится? под большими объемами подразумевается содержимое groups или то что внутри IN окажется?

Содержимое relations

На простых запросах, смотрю, планы одинаковые, но помню, что на запросах посложнее EXISTS часто выигрывает у IN.
5 авг 11, 12:38    [11075798]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить