|
|
|
Не нравится как работает индексный поиск.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Индекс TB_TARIFF_IDX1 он использует, но в id_category = 1 всего 35 тарифов с разными диапазонами дат. Эта зараза совершает 35 операций индексированного чтения. Ну на фига, если результат 1-на строка. Можно как-нибудь переделать, чтобы хоть 2-3 операции чтения делал? Я даже в индекс ещё одно поле добавлял, чтобы уникальным сделать. А он всё равно 35 чтений делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 11:42:54 |
|
||
|
Не нравится как работает индексный поиск.
|
|||
|---|---|---|---|
|
#18+
Так - доэксперементировался. Со стула слетел, блин. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Результат 5-ть записей — пять операций индексного чтения. ЛЕПОТА. Объясните на низком уровне как оптимизатор интерпретирует одно и как другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 12:10:19 |
|
||
|
Не нравится как работает индексный поиск.
|
|||
|---|---|---|---|
|
#18+
Твой первый пример вообще был бредовый. Создавать индекс (A, B) и использовать его в предикате F between A and B... это сильно. Ключ в композитных индексах - единый. Для использования сегмента B индекса требуется _равенство_ на сегмент А. В твоем запросе сервер мог использовать только первые два сегмента из трех (A = <value1> и B >= <value2>), отсюда и 35 индексированных чтений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 12:27:16 |
|
||
|
Не нравится как работает индексный поиск.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 12:45:17 |
|
||
|
Не нравится как работает индексный поиск.
|
|||
|---|---|---|---|
|
#18+
автор/* без between`а — вот так тоже 35 чтений */ where (t.id_category = :param_category) and (:param_date >= t.st_date) and (:param_date <= t.en_date) Есс-но. BETWEEN оптимизатор преобразует в ту же пару ">=" и "<=". автор/* а вот именно так — только 1-но чтение */ where (t.id_category = :param_category) /* для одного индекса */ and (:param_date >= t.st_date) and (t.id_category = :param_category) /* для другого индекса */ and (:param_date <= t.en_date) Один предикат может быть выполнен только по одному индексу. Оптимизатор не умеет клонировать предикаты, чтобы добиться большего индексного покрытия. В данном случае ты дал оптимизатору возможность использовать оба индекса, результирующие битовые карты номеров записей были объединены по AND и полученная карта содержит один номер записи. Результат - ровно одно индексированное чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 13:01:40 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=471&tid=1578631]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 327ms |

| 0 / 0 |
