#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 мс, но все равно требуется, чтобы он был быстрее? Это довольно жесткое требование.