|
|
|
|
WhiteWolf |
Вторник, 09 Июля 2002, 21:30
|
Участник
Профиль
Группа: Участник
Сообщений: 45
Регистрация: 27.01.2002
Из: Екатеринбург
Пользователь №: 1165
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Как красиво сделать вот что: SELECT Объекты.ID FROM Объекты WHERE Объекты.ID NOT IN (SELECT ПлохиеОбъекты.ID FROM Плохие объекты) Обе таблицы содержат примерно по 15 тысяч записей. Если такой запрос выполнять в Access то он это делает вечность (я так и не дождался). Но нужо чтоб это происходило секунд за пять. Как составить запрос чтоб он выполнялся быстрее?
|
|
|
|
|
johndmitr |
Пятница, 12 Июля 2002, 12:14
|
Участник
Профиль
Группа: Участник
Сообщений: 64
Регистрация: 28.06.2002
Из: Москва
Пользователь №: 2567
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Как показывает практика работы в VFP 6.0 - изящно еще не означает быстро. В Фоксе разбиение сложных запросов на несколько более простых существенно увеличивает скорость обработки, особенно если базы большие. Я думаю, что причина медленной работы такого запроса в том, что команда SELECT заточена как раз на поиск по общему полю (ключу), а здесь наоборот и поэтому инструменты быстрого поиска не работают. Как бы я сделал в VFP. Может это не очень изящно, но работать будет быстро. В базе1 ввел бы поле, которое по команде UPDATE определяло бы принадлежность записи к базе2. Ну а потом SELECT по этому полю со свистом.
|
|
|
|
|
johndmitr |
Пятница, 12 Июля 2002, 12:47
|
Участник
Профиль
Группа: Участник
Сообщений: 64
Регистрация: 28.06.2002
Из: Москва
Пользователь №: 2567
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Еще пару строк. Я не знаю, что у Вас за задача, но если этот запрос надо делать часто, то я бы сделал обновление признака принадлежности записи в реальном времени, то есть при изменении любой из баз. В таком варианте скорость выполнения запроса будет зависеть только от объема выборки и параметров компъютера.
|
|
|
|
|
mpa |
Пятница, 12 Июля 2002, 15:43
|
![](style_avatars/drake.gif)
Участник
Профиль
Группа: Участник
Сообщений: 1786
Регистрация: 11.06.2002
Пользователь №: 2401
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
С такими запросами сталкиваюсь по работе. Обработка баз до 25000 записей. Поставил себе Delphi5.0. Такие запросы оформляю в DataBase Desktop-е. На компьютере с 350 процом - в среднем 2-3 минуты.
|
|
|
|
|
|
Пятница, 12 Июля 2002, 20:00
|
Unregistered
Профиль
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
![biggrin.gif](http://wincity.ru/style_emoticons/default/biggrin.gif) Между прочим это очень даже быстро!
|
|
|
|
|
johndmitr |
Пятница, 12 Июля 2002, 20:25
|
Участник
Профиль
Группа: Участник
Сообщений: 64
Регистрация: 28.06.2002
Из: Москва
Пользователь №: 2567
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Если бы моя программа работала с такой скоростью, меня бы давно уже выгнали. Грамотно написанный SQL запрос из 2-3 dbf файлов размером 100-200 тыс. записей выполняется за несколько секунд. Но правда это в быстром Фоксе, а насчет Access и Delphi - не знаю, иожет 2-3 минуты это нормально.
|
|
|
|
|
WhiteWolf |
Воскресенье, 14 Июля 2002, 20:26
|
Участник
Профиль
Группа: Участник
Сообщений: 45
Регистрация: 27.01.2002
Из: Екатеринбург
Пользователь №: 1165
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Судя по всему придется делать временную таблицу. А скорость обработки мне нужна - 2-3 секунды на 800 celeron. Моя программа на C++ будет выполнять два запроса по очереди. А вот чисто академический вопрос: если бы это был SQL server и под ним сделать SQL функцию, насколько это было бы быстро?
|
|
|
|
|
Beerkoff |
Понедельник, 15 Июля 2002, 17:23
|
Администрация
Профиль
Группа: WinCity Team
Сообщений: 895
Регистрация: 04.02.2001
Из: Санкт-Петербург
Пользователь №: 26
Конфигурация
Корпус: -- Процессор: Другой Материнская плата: ASUS Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
чтобы быстро запросы выполнялись нужно индексировать поля, к значениям которых происходит обращение при запросе
|
|
|
|
|
johndmitr |
Вторник, 16 Июля 2002, 10:43
|
Участник
Профиль
Группа: Участник
Сообщений: 64
Регистрация: 28.06.2002
Из: Москва
Пользователь №: 2567
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Насчет индексов в SQL - вопрос конечно интересный. Дело в том, что команда SELECT использует свои методы оптимизации поиска. В Фоксе это Rushmore. В Access что-то другое. И индексные файлы при этом категорически рекомендуется отключить, потому что SELECT генерит свои индексы в соответствии со структурой операнда WHERE.
|
|
|
|
|
Alexus555 |
Понедельник, 29 Июля 2002, 10:29
|
Участник
Профиль
Группа: Участник
Сообщений: 33
Регистрация: 29.07.2002
Из: Astana
Пользователь №: 2865
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Мужики! Не понимаю проблемы! У меня на SQL Server такие запросы выполняются как нефиг делать! Я специально попробовал в Delphi 4.0 подключиться и выполнить этот запрос - не больше двух секунд. Возможно влияет и то, что у меня PIII-800 и 128 метров памяти, но, млин, неужели на Целероне-800 это будет работать _значительно_ медленнее (до двух минут)?!
|
|
|
|
|
WhiteWolf |
Понедельник, 05 Августа 2002, 21:35
|
Участник
Профиль
Группа: Участник
Сообщений: 45
Регистрация: 27.01.2002
Из: Екатеринбург
Пользователь №: 1165
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Вот мне и интересно насколько SQL Server быстрее чем Microsoft Jet. Потому что подобные запросы под Access выполняются совсем не быстро...
|
|
|
|
|
Alexus555 |
Вторник, 06 Августа 2002, 7:56
|
Участник
Профиль
Группа: Участник
Сообщений: 33
Регистрация: 29.07.2002
Из: Astana
Пользователь №: 2865
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Ну я же говорю, что в SQL Server такие запросы - не проблема. Все выполняется в течении пары секунд! Попробуй!
|
|
|
|
|
ivm |
Четверг, 21 Ноября 2002, 19:13
|
Участник
Профиль
Группа: Участник
Сообщений: 52
Регистрация: 30.04.2001
Пользователь №: 83
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
![](style_images/1/spacer.gif)
|
Наверное имеет значение не только какой сервер, но и на чём написана клиентская часть.
Как вообще можно сравнивать Access и VFP??? офисный продукт и проф. систему... Попала ко мне както прога: *mdb тел. справочник тысяч на сто записей, на Access под А800/256 работал ужасно медленно. Я просто сконвертировал его в *.dbf (не помню только выполняет ли Аксесс конвертацию в dbf, если нет, то, значит, выполнял промежуточно в *.xls). Затем написал простейшую оболочку на VFP, для работы с этим *.dbf, скорость поиска после этого увеличилась более чем в 10 раз, (причём, очень сильно увеличилась даже скорость простого скроллинга по таблице).
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
|
0 Пользователей:
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|