| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Ограничить кол-во записей, возвращаемых Query |
| Автор: petlyura 12.6.2008, 16:30 |
| Привет, Форумчане! Есть таблицы неимоверных размеров. Из них я получаю запросом некоторые записи путем задания условий WHERE и IN. Но этих записей может вернуться сотня тысяч, а мне столько даром не надо, тем более запрос много времени занимает. Подскажите, как-то можно заставить Query возвращать не более определенного кол-ва записей, например, 1000? P/S. Таблицы Paradox7 |
| Автор: Dmi3ev 12.6.2008, 20:52 |
| Есть такой предикат в SQL TOP, приведу пример: SELECT TOP 5 field1, field2,field3, ... FROM MyTable; Будет взято только пять записей из таблицы, в билдере не пробовал, но должно работать. |
| Автор: JayTi 13.6.2008, 06:59 | ||||||
Смотря какая СУБД, на фаербёрде есть такой указатель фёрст в запросе
это запрос выдаст первых 1000 записей а если
то вернёт последние 1000 записей если такой вариант не подходит, то делай в своём квери к примеру
|
| Автор: petlyura 13.6.2008, 12:05 | ||
| Dmi3ev, вот не работает у меня с TOP и с FIRST и с RECNO(). Не дружит Парадокс у меня с этими предикатами, функциями. JayTi
Может, у кого были такие проблемы, и знаете решение, подскажите. |
| Автор: fish9370 13.6.2008, 13:45 | ||
попробуй:
|
| Автор: petlyura 13.6.2008, 15:23 |
| Не выходит и с LIMIT. Может кто-то попробует у себя создать мини-проект с таблицей Paradox и запросом к нему с TOP, FIRST или LIMIT? И если все работает, сообщите, пожалуйста. У меня постонно ругается Token not found и т.п. |
| Автор: gather 15.6.2008, 09:13 | ||
Вот так попробуйте. |
| Автор: jonie 15.6.2008, 11:29 | ||
если есть автоинкрементируемое поле int тогда можно так (пример, требует доработки).
|
| Автор: gather 15.6.2008, 19:46 |
| jonie, не подойдет Ваш способ, ибо он будет выбирать постоянно ПЕРВЫЕ 1000 записей. А топикастеру необходимо ОГРАНИЧИТЬ количество записей в resultset. Кстати вот http://64.233.183.104/search?q=cache:rMVF7vUbb6gJ:forum.sources.ru/index.php%3Fact%3DPrint%26client%3Dwordr%26f%3D13%26t%3D217259+Paradox+LIMIT&hl=ru&ct=clnk&cd=8&gl=ru&lr=lang_ru схожая проблема у народа. |
| Автор: jonie 15.6.2008, 22:26 | ||
gather я писал что пример требует доработки. однако ничего в нем не вижу такого, чтобы его не переделать... скажем подобное на T-SQL должно прокатить.
и вполне себе подойдет |
| Автор: petlyura 17.6.2008, 15:18 | ||||
И так не получилось. Никто не пробовал у себя создать маленький запрос на выборку с TOP, LIMIT или еще какой-нибудь хренью? У меня не выходит. Пользуюсь только BDE, табл. Paradox. Решил попытать счастье по-другому. Взял разбил запрос на несколько десятков запросов с помощью условия WHERE. А именно, допустим первоначально возвращалось 100.000 записей, теперь организован цикл, в ходе которого возвращается по несколько тысяч записей. И когда сумма возвращенных записей превысит 32К записей, то выйти из цикла. Но если сразу время выполнения запроса составляло несколько секунд, то сейчас - около 1,5 минут. Prepare() и индексы использую. Меня, может, и несколько секунд бы устроило, но это всего лишь тест, в реальности, объемы таблиц могут быть значительнее. Т.е. первый вариант может угнать во времени с геометрической прогрессией, второй - мне кажется, так и останется на уровне 1,5 минут. Но это много. Что делать? |
| Автор: Fazil6 17.6.2008, 16:46 | ||
так в T-SQL есть TOP... Нафиг там выкрутасы не здались |
| Автор: jonie 17.6.2008, 18:56 |
| Fazil6 ну а что парадокс не поддерживает подобное?) в плане подзапрос+автоинкримент. и топ кстати, не даст то что я написал. всмотрись : тут постраничная выборка фактически может быть реализована. с топом так явно не прокатит (это не limit в мускуле).... например : надо выбрать 5-ую страницу, в страниц по 20 записей. попробуй топом...при условии, например, что ключ guid типа. |
| Автор: petlyura 18.6.2008, 09:34 | ||||
Вот и ROW_NUMBER() не понимает. Project Project1.exe raised exception class EDBEngineError with message 'Invalid use of keyword. Token: ROW_NUMBER() Так же он пишет и о всех TOP, LIMIT, FIRST |
| Автор: jonie 18.6.2008, 11:16 |
| открой хелп и почитай наконец про функции парадокса. |
| Автор: petlyura 18.6.2008, 13:21 | ||
Открывал, ничего толкового не нашел. :( Буду искать выход. |