Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Вниз

Как избежать лишний трафик?   Найти похожие ветки 

 
sargos   (2003-08-19 03:22) [0]

Как избежать лишний трафик?
Уважаемые знатоки, что вы можете посоветовать в такой ситуации:
Среда: Mysql -> Delphi7 -> DBExpress
Для упрощения понимания привожу часть БД.

Таблицы в отношениях Мастер - Деталь:

Мастер таблица "work" - таблица для хранения значений констант
(SQLQuery -> DataSetProvider -> ClientDataSet -> DataSource)
Поле Тип Ноль Ключ
c_id smallint(3) Нет primary key, auto_increment
pr smallint(2) Нет index //поле связи
val1 varchar(30) Да //хранимое значение
val2 varchar(15) Да //хранимое значение

Деталь таблица "comment" таблица для хранения примечаний (примечания
используются не часто, нет смысла каждый раз их грузить на клиента +
в БД несколько таблиц использующих примечания).
(SQLTable -> DataSetProvider -> ClientDataSet -> DataSource)
Поле Тип Ноль Ключ
kl_id smallint(3) Нет index //поле связи с таблицей work "константы"
za_id mediumint(8) Нет index //поле связи c таблицей zayavka "заявка"
primech varchar(250) Да //текст примечания

Связь по полям kl_id -> c_id

Все нормально работает, но при анализе трафика...

При активизации ClientDataSet (мастер таблица) выполняется запрос:
select * from work where (pr = "3") order by val1 //ну тут все понятно :)

а вот для деталь таблицы :(
select * from comment //Зачем это? Клиенту полностью грузится таблица примечаний!
И она не используется! Так как следом выполняется запрос:

select * from comment where (kl_id = "49")
--------------------------------
При использовании SQLQuery вместо SQLTable программа завершается с сообщением об ошибке в
dbexpmysql.dll

При использовании SQLDataSet вместо SQLTable получаем:
1. SQLDataSet -> CommandType -> ctTable
SQLDataSet -> CommandText -> comment
select * from comment //То-же самое
select * from comment where (kl_id = "49") //То-же самое

2. SQLDataSet -> CommandType -> ctQuery
SQLDataSet -> CommandText -> select * from comment
select * from comment where (kl_id = "49")
select * from comment where (kl_id = "49")
- запрос выполняется два раза, что уже лучше, но почему два раза?

Может быть я что-то не так делаю?
Подскажите пожалуйста что мне делать в данной ситуации.
Заранее благодарен.


 
Sergey13   (2003-08-19 10:46) [1]

2sargos © (19.08.03 03:22)
>а вот для деталь таблицы :(
select * from comment //Зачем это? Клиенту полностью грузится таблица примечаний!
И она не используется!

А лукапные поля есть? Если есть, то из-за них.

>c_id smallint(3) Нет primary key, auto_increment
Не маловато число для ключа. Если в БД максимум 999 записей то и трафика особого не предвидится.


 
Nikolay M.   (2003-08-19 10:47) [2]

1) Рекомендую вместо dbexpress поставить библиотеку прямого доступа к мускулу ZeosLib.
2) У провайдера мастера попробуй поставить poFetchDetailsOnDemand.
3) В детальном датасете все-таки лучше используй запроc вида SELECT ... WHERE kl_id=:kl_id, соответствующему CDS-у на клиенте сделай Fetch params и заполняй значение параметра на клиенте руками по мере надобности.

Пока все.


 
sargos   (2003-08-20 04:29) [3]

>А лукапные поля есть? Если есть, то из-за них.
Нет, таких полей нет.

>Не маловато число для ключа. Если в БД максимум 999 записей то и трафика особого не предвидится.
В таблице констант будет присутствовать максимум 150-200 записей,
но дело не в этом, еще ряд таблиц в отношениях Мастер-Деталь с таблицей примечаний её используют
za_id mediumint(8) Нет index //поле связи c таблицей zayavka "заявка"
или тут можно что-то улучшить?


 
sargos   (2003-08-20 04:31) [4]

>1) Рекомендую вместо dbexpress поставить библиотеку прямого доступа к мускулу ZeosLib.

Установил ZeosDBO, выполнил ваши рекомендации, теперь порядок.
Большое спасибо!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
3-33518
Lazy Cat
2003-08-19 02:47
2003.09.11
SQL запрос


4-33841
Павел
2003-07-12 21:35
2003.09.11
Курсор над приложением


3-33432
Lenchik_Z
2003-08-22 10:24
2003.09.11
Отключение DBF-ок после выполнения ADOQuery


8-33694
alexus
2003-05-12 14:19
2003.09.11
Скроллинг картинок


14-33803
изм
2003-08-22 13:01
2003.09.11
не работает Основная





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский