Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.11;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
7-33835
Antonyan
2003-06-26 11:23
2003.09.11
Запись в EXE


1-33592
Леонид
2003-08-29 03:24
2003.09.11
Нужно заблокировать в 1 из форм Alt + F4.


1-33631
viksoft
2003-08-31 16:04
2003.09.11
дописать в конец ехе а потом считать


1-33536
dez
2003-09-01 19:03
2003.09.11
CoInitialize has not been called


1-33686
MadGhost
2003-08-29 13:43
2003.09.11
Работа с текстом.