Форум: "Базы";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизМожет ли сервер IB изменить план запроса после добавления данных? Найти похожие ветки
← →
Sergey Vorobyev (2004-07-13 11:43) [0]Привет всем!
Жил да был один SQL запрос. Через некоторое время он стал выполняться медленно-медленно (было 3 сек., стало 1.5 мин). Стали смотреть план запроса, выяснилось, что туда вкрался один NATURAL, хотя раньше его не было. Я не очень-то разбираюсь в планах, только периодически смотрю, чтобы были нужные индексы и "натуралов" было меньше (это помогает мне оптимизировать запросы).
Обновили статистику, сделали backup/restore не помогло, проверяли на IB6,7.x - результат тот же.
Замечу, что в структуре БД никаких изменений не было (ни индексов, ни полей, ни таблиц и т.п. не добавлялось и не изменялось), структуру базы не трогали уже месяц, естественно только данные добавлялись - и вот такая ситуация.
Ощущение такое, что при достижении какого-то количества данных сервер поменял план запроса, что-то других предположений нет..
Вообще такое возможно?
Спасибо.
← →
Sandman25 © (2004-07-13 11:47) [1]Да, план зависит от числа данных в таблицах. При обновлении статистики план рассчитывается заново. Если всегда нужен один и тот же план, используйте директивы оптимизатора.
← →
Sergey Vorobyev (2004-07-13 13:04) [2]
> Да, план зависит от числа данных в таблицах. При обновлении
> статистики план рассчитывается заново.
А где про это можно подробнее (на www.ibase.ru не нашел)
> используйте директивы оптимизатора.
Это как?
Еще слышал, что можно прямо в запросе указать какой использовать план, правда ли это? Если да, то как?
← →
Ильш © (2004-07-13 13:14) [3]читай SQL Ref
там полное описание синтаксиса
← →
Sandman25 © (2004-07-13 14:02) [4][2] Sergey Vorobyev (13.07.04 13:04)
Я, к сожалению, плохо разбираюсь в IB.
← →
Ильш © (2004-07-13 14:09) [5]SELECTRetrieves data from one or more tables. Available in SQL, DSQL, and isql.
SELECT [TRANSACTION transaction]
[DISTINCT | ALL]
{* | <val> [, <val> …]}
[INTO :var [, :var …]]
FROM <tableref> [, <tableref> …]
[WHERE <search_condition>]
[GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]
[HAVING <search_condition>]
[UNION <select_expr> [ALL]]
[PLAN <plan_expr>]
[ORDER BY <order_list>]
[FOR UPDATE [OF col [, col …]]];
<val> = {
col [<array_dim>] | :variable
| <constant> | <expr> | <function>
| udf ([<val> [, <val> …]])
| NULL | USER | RDB$DB_KEY | ?
} [COLLATE collation] [AS alias]
<array_dim> = [[x:]y [, [x:]y …]]
<constant> = num | "string" | charsetname "string"
<function> = COUNT (* | [ALL] <val> | DISTINCT <val>)
| SUM ([ALL] <val> | DISTINCT <val>)
| AVG ([ALL] <val> | DISTINCT <val>)
| MAX ([ALL] <val> | DISTINCT <val>)
| MIN ([ALL] <val> | DISTINCT <val>)
| CAST (<val> AS <datatype>)
| UPPER (<val>)
| GEN_ID (generator, <val>)
<tableref> = <joined_table> | table | view | procedure
[(<val> [, <val> …])] [alias]
<joined_table> = <tableref> <join_type> JOIN <tableref>
ON <search_condition> | (<joined_table>)
<join_type> = [INNER] JOIN
| {LEFT | RIGHT | FULL } [OUTER]} JOIN
<search_condition> = <val> <operator> {<val> | (<select_one>)}
| <val> [NOT] BETWEEN <val> AND <val>
| <val> [NOT] LIKE <val> [ESCAPE <val>]
| <val> [NOT] IN (<val> [, <val> …] | <select_list>)
| <val> IS [NOT] NULL
| <val> {>= | <=}
| <val> [NOT] {= | < | >}
| {ALL | SOME | ANY} (<select_list>)
| EXISTS (<select_expr>)
| SINGULAR (<select_expr>)
| <val> [NOT] CONTAINING <val>
| <val> [NOT] STARTING [WITH] <val>
| (<search_condition>)
| NOT <search_condition>
| <search_condition> OR <search_condition>
| <search_condition> AND <search_condition>
<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
<plan_expr> =
[JOIN | [SORT] [MERGE]] ({<plan_item> | <plan_expr>}
[, {<plan_item> | <plan_expr>} …])
<plan_item> = {table | alias}
{NATURAL | INDEX (<index> [, <index> …]) | ORDER <index>}
<order_list> =
{col | int} [COLLATE collation]
[ASC[ENDING] | DESC[ENDING]]
[, <order_list> …]
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c