|
Помогите советом, плз.
|
|||
---|---|---|---|
#18+
Помогите советом, плз. есть 3 таблицы: 1. Предприятия (48 000 записей) FinInstitute(IdFinInstitute int, ... ) 2. Категории (26 записей) FSCategory(IdFSCategory int, ...) 3. Данные предприятий по категориям (1 248 000 000 записей) на каждое предприятие по 26 записей FormSix(IdFormSix int, IdFinInstitute int, IdFSCategory int, Val_1 int, ... Val_19 int) суть проблемы такая: например запрос (см. ниже) выполняется за ~3 сек. SELECT fsc.IdFSCategory, SUM(fs.Val_1) as Val_1 FROM FormSix fs, FSCategory fsc, FinInstitute fi WHERE fs.IdFSCategory = fsc.IdFSCategory AND fs.IdFinInstitute = fi.IdFinInstitute AND fi.IdFinInstitute < 10000 GROUP BY fsc.IdFSCategory но если в нем перечислить все поля (Val_1 - Val_19) (см. ниже), то время выполнения возростает до 14-18 сек. SELECT fsc.IdFSCategory, SUM(fs.Val_1) as Val_1, SUM(fs.Val_2) as Val_2, ... ... SUM(fs.Val_19) as Val_19 FROM FormSix fs, FSCategory fsc, FinInstitute fi WHERE fs.IdFSCategory = fsc.IdFSCategory AND fs.IdFinInstitute = fi.IdFinInstitute AND fi.IdFinInstitute < 10000 GROUP BY fsc.IdFSCategory почему так возрастает время выполнения, можно ли это бороться? (т.е. как сократить время выполнения, оптимизировать, ...) С уважением, Ильдар. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2001, 13:50 |
|
Помогите советом, плз.
|
|||
---|---|---|---|
#18+
Помогите советом, плз. есть 3 таблицы: 1. Предприятия (48 000 записей) FinInstitute(IdFinInstitute int, ... ) 2. Категории (26 записей) FSCategory(IdFSCategory int, ...) 3. Данные предприятий по категориям (1 248 000 000 записей) на каждое предприятие по 26 записей FormSix(IdFormSix int, IdFinInstitute int, IdFSCategory int, Val_1 int, ... Val_19 int) суть проблемы такая: например запрос (см. ниже) выполняется за ~3 сек. SELECT fsc.IdFSCategory, SUM(fs.Val_1) as Val_1 FROM FormSix fs, FSCategory fsc, FinInstitute fi WHERE fs.IdFSCategory = fsc.IdFSCategory AND fs.IdFinInstitute = fi.IdFinInstitute AND fi.IdFinInstitute < 10000 GROUP BY fsc.IdFSCategory но если в нем перечислить все поля (Val_1 - Val_19) (см. ниже), то время выполнения возростает до 14-18 сек. SELECT fsc.IdFSCategory, SUM(fs.Val_1) as Val_1, SUM(fs.Val_2) as Val_2, ... ... SUM(fs.Val_19) as Val_19 FROM FormSix fs, FSCategory fsc, FinInstitute fi WHERE fs.IdFSCategory = fsc.IdFSCategory AND fs.IdFinInstitute = fi.IdFinInstitute AND fi.IdFinInstitute < 10000 GROUP BY fsc.IdFSCategory почему так возрастает время выполнения, можно ли это бороться? (т.е. как сократить время выполнения, оптимизировать, ...) С уважением, Ильдар. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2001, 13:50 |
|
Помогите советом, плз.
|
|||
---|---|---|---|
#18+
Идет перебор миллионов записей и ничего удивительно что это так медленно работает. Это же надо сложить 25 млн чисел, которые предварительно еще надо сгруппировать. Оптимизировать можно было бы если бы был не тупой перебор, а некие выборки. Кстати - Вы осознанно включили таблицу FinInstitute? Что измениться если написать так? ... FROM FormSix fs, FSCategory fsc WHERE fs.IdFSCategory = fsc.IdFSCategory AND fs.IdFinInstitute < 10000 GROUP BY fsc.IdFSCategory ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2001, 14:08 |
|
Помогите советом, плз.
|
|||
---|---|---|---|
#18+
пригляделся еще. по-моему вы неосознанно пихаете таблицы во FROM а попробуйте написать так SELECT fs.IdFSCategory, SUM(fs.Val_1) as Val_1, SUM(fs.Val_2) as Val_2, ... ... SUM(fs.Val_19) as Val_19 FROM FormSix fs WHERE fs.IdFinInstitute< 10000 GROUP BY fs.IdFSCategory ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2001, 14:13 |
|
Помогите советом, плз.
|
|||
---|---|---|---|
#18+
Спасибо за ответ. таблицу FinInstitute нужна. потомучто на сама деле запрос должен выглядел так, видимо некорректно сократил: FROM FormSix fs, FSCategory fsc, FinInstitute fi WHERE fs.IdFSCategory = fsc.IdFSCategory AND fs.IdFinInstitute = fi.IdFinInstitute AND fi.IdRegion = ..... вот таблица FSCategory здесь действительно лишняя, можно записать так FROM FormSix fs, FinInstitute fi WHERE fs.IdFinInstitute = fi.IdFinInstitute AND fi.IdRegion = ..... GROUP BY fs.FSCategory неужели количество полей влияет сильно влияет на запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2001, 14:35 |
|
Помогите советом, плз.
|
|||
---|---|---|---|
#18+
Если 14-18 секунд много для времени выполнения запроса, то создай четвертую таблицу, в которой храняться результаты этого запроса для каждого предпреятия SumFormSix(IdFormSix int, IdFinInstitute int, IdFSCategory int, SumVal_1 int, ... SumVal_19 int) всего записей 48 000 - как и в таблице предприятий. Конешно тоблицу SumFormSix надо поддерживать в актуальном состоянии - при изменении записей в FormSix менять соответствующие записи в SumFormSix и создать соответствующие индексы По таблице SumFormSix твой запррос будет выполняться за доли секунды ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2001, 17:11 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1827248]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 390ms |
0 / 0 |