SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Скорость выборки
icon5.gif  Скорость выборки [сообщение #2846] Sat, 29 July 2023 16:39 Переход к следующему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
Доброго дня.
Подскажите пожалуйста, не могу разобратся.
Есть таблицы
MODELS
|ID|NAME|ID_CURRENCY|......|

PRICES
|ID|ID_MODEL|ID_PRICE|PRICE|ID_STATUS|ID_USER|
Внешний ключ PRICES.ID_MODEL на MODELS.ID
ID_PRICE - код цены, может быть сколько угодно цен на модели.
ID_STATUS - Активная цена или нет, операция смены цены это текущей активной цене установливаем флаг неактивности и вставляем новую запись с новой ценой, сделано для сохранений истории цен.

таблица валют
CURRENCY
|ID|NAME|SHORT_NAME|.....|

таблица курсов
EXCHANGE_RATE

|ID|ID_CURRENCY|MIN_EXCHANGE_RATE|MAX_EXCHANGE_RATE|ID_STATU S|.....|
Внешний ключ EXCHANGE_RATE.ID_CURRENCY на CURRENCY.ID
ID_STATUS -Активный курс или нет, другими словами текущий "рабочий" курс
Делаю выборку
select a.ID id_model from  MODELS a
 join  price c on c.id_model=a.ID and c.ID_PRICE=2 and c.ID_STATUS=1
 join currency d on d.id=a.ID_CURRENCY
------ Performance info ------
Prepare time = 31ms
Execute time = 16ms
Avg fetch time = 0,53 ms
Current memory = 9 845 168
Max memory = 9 935 328
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 77 134
Делаю запрос

select a.ID id_model from MODELS a

 join  EXCHANGE_RATE b on b.ID_CURRENCY=a.ID_CURRENCY and b.ID_STATUS=1
 join  price c on c.id_model=a.ID and c.ID_PRICE=2 and c.ID_STATUS=1
 join currency d on d.id=b.ID_CURRENCY
------ Performance info ------
Prepare time = 31ms
Execute time = 1s 375ms
Avg fetch time = 45,83 ms
Current memory = 9 857 632
Max memory = 9 935 328
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 12 399 373
Почему такая разница в скорости выборки?
В таблице MODELS 23000 записей
В таблице PRICES 115000 записей
В таблице EXCHANGE_RATE 250 записей
FB 2.5.9

[Обновления: Sat, 29 July 2023 16:41]

Известить модератора

Re: Скорость выборки [сообщение #2848 является ответом на сообщение #2846] Sat, 29 July 2023 17:33 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время в онлайне  shavluk
Сообщений: 82
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Индексы, планы?

P.S. Для сохранения истории цен удобнее использовать одну цену, но хранить дату изменения цены. Т.е. всегда можно посмотреть какая цена на изделие была вчера и будет завтра
Re: Скорость выборки [сообщение #2849 является ответом на сообщение #2848] Sat, 29 July 2023 17:44 Переход к предыдущему сообщениюПереход к следующему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
При первой выборке
Plan
--------------------------------------------------------------------------------
PLAN JOIN (C INDEX (FK_PRICES_CURRENCY), A INDEX (PK_MODELS), D INDEX (PK_CURRENCY))
При второй

Plan
--------------------------------------------------------------------------------
PLAN JOIN (C INDEX (FK_PRICES_CURRENCY), A INDEX (PK_MODELS), D INDEX (PK_CURRENCY), B INDEX (FK_EXCHANGE_RATE_CURRENCY))
Re: Скорость выборки [сообщение #2851 является ответом на сообщение #2849] Sat, 29 July 2023 21:05 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Составной индекс должен помочь
Create index ibx_exchange_cur_status on exchange_rate(id_currency, is_status)
Re: Скорость выборки [сообщение #2852 является ответом на сообщение #2851] Sun, 30 July 2023 00:41 Переход к предыдущему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
Спасибо, как рукой сняло
Предыдущая тема: Как прервать загрузку блоба?
Следующая тема: Запрос на выборку строки с самой свежей датой
Переход к форуму:
  


Текущее время: Sat Nov 23 12:38:19 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00686 секунд