Ускорение выбора orm PostgreSQL / SQL Alchemy

#postgresql #sqlalchemy

#postgresql #sqlalchemy

Вопрос:

У меня есть таблица с большим количеством строк (~ 1 миллион), и когда я использую следующий запрос select, для получения результата требуется в среднем 0,002 секунды, мне нужно перебирать эти записи, поэтому мне нужно, чтобы это было быстрее, я использую ORM SQLAlchemy для выполнения запросов

  MaxSeq = 10 #MaxSeq  can change 
 config.session.query(OTableConsignList.A).filter(
                    OTableConsignList.B== 'SOMEID',
                    OTableConsignList.A!= 'SOMETHING' ,
                    OTableConsignList.A!=  'SOMETHING_ELSE', or_(OTableConsignList.C< MaxSeq ,
                                                               MaxSeq == 0))

  

Я создал индекс следующим образом

 
CREATE INDEX consign_list_index ON tbl_consign_list("A","B","C")
  

Теперь есть другие предложения по повышению скорости?

Комментарии:

1. Вместо того, чтобы запускать подобный запрос для каждого интересующего идентификатора, я предлагаю вам попробовать запросить все интересующие вас идентификаторы одновременно. Как правило, это намного эффективнее.

2. Да, я попробую это

3. Я думаю, что индексы нельзя использовать для удовлетворения предикатов not equals, поэтому "A" использование в качестве первого столбца индекса может быть не очень хорошей идеей. Вместо этого, похоже, just ("B", "C") был бы лучшим выбором. Не забудьте использовать EXPLAIN , чтобы проверить, используются ли ваши индексы, а также, что иногда сканирование seq выполняется быстрее. Теперь сам вопрос немного неясен. Вы говорите, что запрос выполняется за 2 мс, но все равно требуется, чтобы он был быстрее? Это довольно жесткое требование.