Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 14:18   #1
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию ADO против BDE

Изначально я написал приложение для работы с БД на Sybase используя BDE. Приложение делала SQL запрос в БД и я просматривал нужные мне данные. Мне понадобилось добавить несколько функций, которые удобно создавать работая с ADO. Снова написал прогу, использую ADO (ADOConnection->ADOQuery->DataSource->BDGrid). Сразу стало понятно, что в ADO все функции, которые я хотел добавить, тут сделать будет очень легко!НО я столкнулся с другой проблемой, которая даёт такой большой минус ADO, что мне перехотелось его использовать! Запрос в БД выполняется не 15 секунд как в BDE, а 3 минуты!!! Это просто ужас!!!!

Вот возникает вопрос, можно какими то способами это время сократить???
VHomer вне форума Ответить с цитированием
Старый 15.06.2010, 14:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно какими то способами это время сократить???
ADO тут однозначно не при чем.
Просто твоя БД нехорошо настроена. Может быть не проиндексирована или еще что.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2010, 14:41   #3
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
ADO тут однозначно не при чем.
Просто твоя БД нехорошо настроена. Может быть не проиндексирована или еще что.
Я не могу понять в чём причина, поэтому всё может быть! Стоит только отметить, что в обоих случаях используется одна и та же БД, одна и та же таблица, один и тот же запрос!
Я допускаю, что можно что то настроить, чтобы всё было быстрее...но что?
Вот и обращаюсь за советом.
VHomer вне форума Ответить с цитированием
Старый 15.06.2010, 21:00   #4
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
По умолчанию

Цитата:
Запрос в БД выполняется не 15 секунд как в BDE, а 3 минуты!!!
Да даже 15 секунд это все равно много!!! Сколько записей в базе?
Явно база без индексов.

Все дело только в самом SQL-запросе. Смотри стоимость запроса.
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Старый 16.06.2010, 06:46   #5
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от GenniY Посмотреть сообщение
Да даже 15 секунд это все равно много!!! Сколько записей в базе?
Явно база без индексов.
В запросе объеденены 3 таблицы!В одной 356595 записей(около 15 столбцов), во второй стока же, а вот в третьей мало! А вообще, в базе порядка 100 таблиц! И в них объем информации не меньше! Так что поверь, 15 секунд это ещё даже очень ничего!

В том что база без индексов, я очень сомневаюсь! Над ней работают мозговитые люди!

А вообще, меня больше беспокоит как сделать, чтобы ADO шевелился побыстрее!
VHomer вне форума Ответить с цитированием
Старый 16.06.2010, 07:22   #6
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Да какая разница кто работает над БД. У тебя запрос цепляет индексы или фулскан?
План запроса посмотри.
Посмотри какие индексы цепляются.
Посмотри по каким индексам будет строиться выборка быстрее.
Поправь запрос чтоб подбирался нужный тебе индекс.
А не автоматически.

Я так понимаю что работаешь ты с запросом который постил в другой ветке
Код:
SELECT dbo.CreditCertificate.LogNb, dbo.CreditCertificate.CardNo, dbo.CreditCertificate.CalcNo, dbo.CreditCertificate.Summ, dbo.CreditCertificate.CTC, dbo.CreditCertificate.CreateDate,db o.CreditCertificate.ExpiredDate AS Îêîí÷àíèå, dbo.CreditCertificate.DateIn, dbo.CreditCertificate.Certificate, dbo.CreditCertificate.CERTIFICATE_I D, dbo.CertificationTerminals.Terminal Number, dbo.Market.Short, dbo.Market.Additions FROM dbo.CertificationTerminals, dbo.CreditCertificate, dbo.Market WHERE ((dbo.CreditCertificate.LogNb like "'+log+'") and((dbo.CreditCertificate.ExpiredD ate)>getdate())) AND ((dbo.CreditCertificate.CERTIFICATE _ID)=(dbo.CertificationTerminals.CE RTIFICATE_ID) and(dbo.CertificationTerminals.Term inalNumber)=(dbo.Market.Place))
Приведи его в нормальный вид. У меня получилось так:
Код:
SELECT 
    cc.LogNb, 
    cc.CardNo, 
    cc.CalcNo, 
    cc.Summ, 
    cc.CTC, 
    cc.CreateDate,
    cc.ExpiredDate AS Îêîí÷àíèå, 
    cc.DateIn, 
    cc.Certificate, 
    cc.CERTIFICATE_ID, 
    ct.TerminalNumber, 
    m.Short, 
    m.Additions 
FROM 
    dbo.CertificationTerminals ct, 
    dbo.CreditCertificate cc, 
    dbo.Market m
WHERE cc.LogNb like "некая подстрока"
AND cc.ExpiredDate > некая дата 
AND cc.CERTIFICATE _ID=ct.CERTIFICATE_ID 
AND ct.TerminalNumber=m.Place
После этого посмотри план своего запроса.
Посмотри какие индексы цепляются для таблицы CreditCertificate (хотя здесь скорее всего фулскан).
Посмотри есть ли индекс по полю CERTIFICATE_ID для таблицы CertificationTerminal (может быть составной индекс. Посмотри чего тебе не хватает для того чтоб он подхватился. Может быть доп. ограничения по датам...)
Также посмотри есть ли индекс по полю Place для таблицы Market
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)

Последний раз редактировалось rdama; 16.06.2010 в 07:46.
rdama вне форума Ответить с цитированием
Старый 16.06.2010, 09:46   #7
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от rdama Посмотреть сообщение
После этого посмотри план своего запроса.
Посмотри какие индексы цепляются для таблицы CreditCertificate (хотя здесь скорее всего фулскан).
Посмотри есть ли индекс по полю CERTIFICATE_ID для таблицы CertificationTerminal (может быть составной индекс. Посмотри чего тебе не хватает для того чтоб он подхватился. Может быть доп. ограничения по датам...)
Также посмотри есть ли индекс по полю Place для таблицы Market
Как посмотреть, есть ли вообще индексация?Я просто хз чё это такое
С базами в Delphi работаю 2 недели по большому счёту. SQL полтора месяца назад по нормальному изучил.
Это вообще не моя работа, я чисто для себя. А темы создаю потому что реально это интересно и я уже много нового узнал от посетителей! Так что рад буду, если эту тему мне распинают)))
VHomer вне форума Ответить с цитированием
Старый 16.06.2010, 10:07   #8
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Итак для того чтоб узнать что такое индексы идем сюда
http://sql.ru/faq/faq_topic.aspx?fid=285

Для того чтоб посмотреть какие они есть тебе надо.
Я так понимаю у тебя есть какая-то софтина в которой ты пишешь запросы к БД(SQL Manager).
Так вот в ней скорее всего есть древовидная структура твоей БД.
В этой структуре ищешь нужную тебе таблицу и нажимаешь на нее.
Обычно открывается дерево Поля(Fields), Индексы(Indexes),Триггеры(Triggers) .
Вот там и смотришь Индексы присутствующие на таблице.

По поводу плана.
Есть софт нормальный в котором обычно в нижней части экрана показывается план.
А есть не нормальный софт там чтоб посмотреть план надо поискать куда же его засунули разрабы.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 16.06.2010, 10:43   #9
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
По умолчанию

Используй SQL Navigator. Я не помню где, но в нем точно можно просмотреть стоимость любого запроса, то есть срабатываю индексы или идет фулскан. Так можно модифицировать запросы без прямого обращения к базе и сразу просматривать результат эффективности запроса.

А вообще, обратись к БДешникам, которые работают с этими таблицами, они тебе в миг построят самый оптимальный запрос!

И ADO не причем!
Получил помощь — отблагодарил.
GenniY вне форума Ответить с цитированием
Старый 16.06.2010, 10:47   #10
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Насколько я помню SQL Navigator для Oracle.
Или есть для Sybase?
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VS C++ против C++ Builder Maladoj C++ Builder 9 06.04.2009 18:55
BDE против ... всех. _SERGEYX_ БД в Delphi 10 18.02.2008 08:10