November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Thursday, October 2nd, 2008 11:17 am
Я раньше думал, что Оракл умный. И сам умеет оптимизировать выполнение запросов. А тут наткнулся на ситуацию, когда простейший
SELECT count(*) FROM однатаблица WHERE поле = 'foo' AND дата_добавления >= SYSDATE-30/1440
выполнялся по 15 минут, пока в запрос явным образом не добавили /*+ INDEX_JOIN(BAZ) */

Что я делаю неправильно?
Tags:
Thursday, October 2nd, 2008 01:02 pm (UTC)
таблица t1 с индексом по f1 и таблица t2 с индексом по f1

select *
from t1,t2
where t1.f0=t2.f0 and t1.f1=0 and t2.f1<0

что сделает mysql ?
Friday, October 3rd, 2008 09:41 am (UTC)
mysql по-моему всегда тупо сделает join.

Сам пример хороший аргумент против концепции "ничего кроме rule based не "нужно
Friday, October 3rd, 2008 09:56 am (UTC)
проблема с какой таблицы начать, т.е. надо знать какой предикат отсечет больше записей и какой метод соединения выбрать hashj nl mergej sortj ?

mysql всегда сначала идет в первую (во from) таблицу или как?
Friday, October 3rd, 2008 01:19 pm (UTC)
Да как-то так. Это зависит естественно от того какие индексы созданы.

Я на самом деле понял, что если сделать индексы:
t1: f1, f0
t2: f1, f0
то этот запрос можно выполнить очень быстро проходом по 2 индексам сразу.