DB вопрос
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
DB вопрос
Есть таблица с большим количеством записей
CREATE TABLE sometable
(
id INTEGER NOT NULL,
name VARCHAR(30),
куча других полей
);
Нужно быстро определить есть ли в ней записи с id=1
select count(*) from sometable
работает медленно, так как считает всё.
select count(*) from
(
SELECT * from sometable
WHERE id=1
limit 1
)
не работает. Как правильно?
PostgreSQL, но хотелось бы стандартное решение.
Спасибо
CREATE TABLE sometable
(
id INTEGER NOT NULL,
name VARCHAR(30),
куча других полей
);
Нужно быстро определить есть ли в ней записи с id=1
select count(*) from sometable
работает медленно, так как считает всё.
select count(*) from
(
SELECT * from sometable
WHERE id=1
limit 1
)
не работает. Как правильно?
PostgreSQL, но хотелось бы стандартное решение.
Спасибо
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
Re: DB вопрос
SELECT COUNT(*) FROM sometable WHERE id=1
если id индексирован, то работать должно быстро
если id индексирован, то работать должно быстро
Последний раз редактировалось Yury 27 май 2008, 09:52, всего редактировалось 1 раз.
- CdR
- Графоман
- Сообщения: 11245
- Зарегистрирован: 11 окт 2004, 19:27
- Откуда: Европа, центр, за углом направо.
Re: DB вопрос
select count(*) from sometable where id=1;StS писал(а): select count(*) from
(
SELECT * from sometable
WHERE id=1
limit 1
)
не работает. Как правильно?
не пойдёт?
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
Re: DB вопрос
CdR писал(а): select count(*) from sometable where id=1;
не пойдёт?
StS писал(а): select count(*) from sometable
работает медленно, так как считает всё.
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
Re: DB вопрос
where id=1StS писал(а):CdR писал(а): select count(*) from sometable where id=1;
не пойдёт?StS писал(а): select count(*) from sometable
работает медленно, так как считает всё.
- CdR
- Графоман
- Сообщения: 11245
- Зарегистрирован: 11 окт 2004, 19:27
- Откуда: Европа, центр, за углом направо.
Re: DB вопрос
И?StS писал(а):CdR писал(а): select count(*) from sometable where id=1;
не пойдёт?StS писал(а): select count(*) from sometable
работает медленно, так как считает всё.
ps: Юрий уже объяснил...
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
Re: DB вопрос
Виноват, следует читать
select count(*) from sometable where id=1
работает медленно, так как считает всё
Записей много, в том числе с id=1
select count(*) from sometable where id=1
работает медленно, так как считает всё
Записей много, в том числе с id=1
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
Re: DB вопрос
в таком варианте считать все не будет, только с id=1StS писал(а):Виноват, следует читать
select count(*) from sometable where id=1
работает медленно, так как считает всё
Записей много, в том числе с id=1
попробуй
exists (select id from sometable where id = 1)
-
- Маньяк
- Сообщения: 4203
- Зарегистрирован: 08 мар 2006, 15:45
- Откуда: Ричмонд
Re: DB вопрос
StS: проверь почту
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
Re: DB вопрос
(Alex) писал(а):StS: проверь почту

-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
Re: DB вопрос
О! Спасибо.Yury писал(а): в таком варианте считать все не будет, только с id=1
попробуй
exists (select id from sometable where id = 1)
select 1 where exists
(
SELECT * from transaction
WHERE Id=1
limit 1
)
-
- Завсегдатай
- Сообщения: 301
- Зарегистрирован: 04 май 2005, 11:33
Re: DB вопрос
Юстас - АлексуYury писал(а):(Alex) писал(а):StS: проверь почтучисло юстасов множится с угрожающей быстротой
Явка провалена. Связь через запасной вариант.
- Yury
- The L'ony
- Сообщения: 26202
- Зарегистрирован: 22 янв 2004, 13:48
- Откуда: Мирный -> Vancouver
- Контактная информация:
Re: DB вопрос
на здоровьеStS писал(а):О! Спасибо.Yury писал(а): попробуй
exists (select id from sometable where id = 1)

- alpax
- Графоман
- Сообщения: 10548
- Зарегистрирован: 04 мар 2003, 17:39
- Откуда: Richmond, BC
Re: DB вопрос
А зачем два селекта? По-моему этого будет достаточно:StS писал(а):О! Спасибо.
select 1 where exists
(
SELECT * from transaction
WHERE Id=1
limit 1
)
SELECT 1 from transaction
WHERE Id=1
limit 1
Кстати, а "TOP #" есть только в MS SQL или это более распространенная опция? Насчет синтаксиса правда сомневаюсь - что-то типа такого:
SELECT top 1 1 FROM transaction WHERE Id=1
(эх, давно не брал я в руки сиквел

- Algor
- Маньяк
- Сообщения: 1355
- Зарегистрирован: 14 мар 2006, 01:38
- Откуда: Самара->Ванкувер
Re: DB вопрос
В Oracle можно использовать rownum. правда , это не аналог TOP, но в данном случае rownum=1 будет тоже работать, но я бы использовал exists (в первую очередь для переносимости кода между разными DB)alpax писал(а): Кстати, а "TOP #" есть только в MS SQL или это более распространенная опция?