powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysql и странности с индексами...
21 сообщений из 21, страница 1 из 1
mysql и странности с индексами...
    #32559039
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
+ --------------+----------------------+------+-----+---------+-------+
 
| Field        | Type                 | Null | Key | Default | Extra |
+ --------------+----------------------+------+-----+---------+-------+
 
| ts           | timestamp( 14 )        | YES  | MUL | NULL    |       |
| ip_saddr     | int( 10 ) unsigned     | YES  |     | NULL    |       |
| ip_daddr     | int( 10 ) unsigned     | YES  |     | NULL    |       |
+ --------------+----------------------+------+-----+---------+-------+
 
Если делаем:
Код: plaintext
explain select * from packets use index (ts) where ts between '2004.06.07' and '2004.06.09 23:30:42';
Получаем такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
+ ---------+-------+---------------+------+---------+------+----------+------------+
 
| table   | type  | possible_keys | key  | key_len | ref  | rows     | Extra      |
+ ---------+-------+---------------+------+---------+------+----------+------------+
 
| packets | range | ts            | ts   |        4  | NULL |  19961398  | where used |
+ ---------+-------+---------------+------+---------+------+----------+------------+
 
Если же делаем так (в промежуток добовляем одну скунду):
Код: plaintext
explain select * from packets use index (ts) where ts between '2004.06.07' and '2004.06.09 23:30:43';
То видим такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
+ ---------+------+---------------+------+---------+------+-----------+------------+
 
| table   | type | possible_keys | key  | key_len | ref  | rows      | Extra      |
+ ---------+------+---------------+------+---------+------+-----------+------------+
 
| packets | ALL  | ts            | NULL |    NULL | NULL |  116914508  | where used |
+ ---------+------+---------------+------+---------+------+-----------+------------+
 
То есть индекс уже не используется, если же подождать ещё некоторое время, когда накопятся данные, то этот промежуток использования индекса увеличивается ещё на секунду и т.д. Я конечно читал что если выборка идёт более чем по 30 процентам всех данных, то просматривается вся таблица, но тут даже и 15 процентов нет, в чём может быть дело???
P.S. Если даже явно указать use index (ts) этот индекс не используется. И так для любого запроса из этой таблицы, в этих запросах учавствует только промежуток во времени. Таблица оптимизирована была.

Спасибо..
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32559263
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите плиз, хоть намекните в чём проблема может быть???

З.Ы. Запрос используя индексы выполняется 2 минуты, если мы временной промежуток увеличиваем на 1 сек, то этот запрос уже не использует индексы, и запрос выполняется 17 минут.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32559825
mechanoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если limit написать, что говорит?
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32559977
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишет, что индекс будет использоваться, но если судить по кол-ву записей, которые он будет просматривать (столбик row в explain) просматриваться будут все записи. Так что, что есть он что его нет.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32559998
mechanoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дак попробуй _выполнить_ с limit'ом.
Andrey_9И так для любого запроса из этой таблицы, в этих запросах учавствует только промежуток во времени.

в смысле, для любого временнОго интервала? Или только для последних записей?
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32560354
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для любого временного интервала, хоть этот временный интервал в начале, хоть в конце, хоть в середине. До определённой разницы во времени ндекс используется, и запрос выполняется 2 минут, и при увеличении этого интервала на 1 секунду индекс не используется и запрос выполняется 18 минут. С накоплением данных этот интервал временной (при котором используется индекс) увеличивается.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32560650
Вопрос какую часть (в %) таблицы ты пытаешся просмотреть используя ограничения во времени?
Если больше 30% - оптимизатор будет выполнять полное сканирование таблици.

Попробуй перестроить индекс.

Проверь - может кто то выполнил команду DISABLR KEY и индекс построен только на части данных!!!
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32560663
Есть вариант - использую
Код: plaintext
FORCE INDEX (idx)
в этом случае ты говоришь оптимизатору, что полное сканирование делать вообще нельзя!!! И он сразу же обязательно будет использоваться индекс!!!
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32560945
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
mysql> explain select * from packets force index (ts) where ts between '2004.06.03' and '2004.06.09';
ERROR  1064 : You have an error in your SQL syntax near 'index (ts) where ts between '2004. 06 . 03 ' and '2004. 06 . 09 '' at line  1 
Версия mysql-3.23.58. :-(
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32562059
Да в твоей версии FORCE INDEX не используется.
Накати 4.0.20

Но надо еще подумать немного.

Код: plaintext
table_name [[AS] alias] [[USE INDEX (key_list)] | [IGNORE INDEX (key_list)] | FORCE INDEX (key_list)]

В версии MySQL 3.23.12 можно указывать, какие именно индексы (ключи) MySQL должен применять для извлечения информации из таблицы. Это полезно, если оператор EXPLAIN (выводящий информацию о структуре и порядке выполнения запроса SELECT), показывает, что MySQL из списка возможных индексов выбрал неправильный. Если нужно. чтобы для поиска записи в таблице применялся только один из возможных индексов, следует задать значение этого индекса в USE INDEX (key_list). Альтернативное выражение IGNORE INDEX (key_list) запрещает использование в MySQL данного конкретного индекса. В MySQL 4.0.9 можно также указывать FORCE INDEX. Это работает также, как и USE INDEX (key_list) но в дополнение дает понять серверу что полное сканирование таблицы будет ОЧЕНЬ дорогостоящей операцией. Другими словами, в этом случае сканирование таблицы будет использовано только тогда, когда не будет найдено другого способа использовать один из данных индексов для поиска записей в таблице. Выражения USE/IGNORE KEY являются синонимами для USE/IGNORE INDEX.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32562233
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
use index никак не помогает, что с этим оператором, что без. А обновиться до 4.х к сожалению нет возможности.. :-(
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32562428
mechanoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если использовать два последовательных промежутка? Либо в 2-х запросах, либо в 1-ом, соединяя их OR. Правда, в последнем случае оптимизатор может их склеить, убрав OR.
З.Ы. Я сие не пробовал.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32562624
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не работает... но это какое то извращение... Может есть способ этот оптимизатор вырубать на время.
А вообще это глюк или что?? Может быть кто-нить знает причину, почему такое происходит???
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32563016
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то в вумной книге сказано, что формат поля TIMESTAMP представляется строкой в виде "YYYYMMDDhhmmss", это DATETIME имеет формат "YYYY-MM-DD hh:mm:ss"
Может - попробовать константы привести в запросе в соответствии с представлением полей?
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32563479
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ничего не меняеся :-(
Да и не может наверное от этого быть такая фигня, с определённым же промежутком дат, индекс то используется.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32566001
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все это выглядит очень странно... Попробуй analyze table, попробуй дропнуть индекс/пересоздать его.
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32568650
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего я только не пробовал удалял, добавлял, делал mysqlcheck -r, потом -a, потом -o. Ну ничего не помогает, я просто не понимаю в чём дело... Что не так.. :-(
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32579788
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ANALYZE TABLE tbl_name
Может поможет?
Импользовать каждый раз, когда база ощутимо выросла.

Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32579861
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делаю mysqlcheck -r, потом mysqlcheck -a, потом mysqlcheck -o. После этого делаю запрос, толку никакого.. :-((
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32588366
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Какая версия MySQL у тебя используется?
На полях DateTime&TimeStamp известный баг с индексами, он поборен в 4.0.16 или 17, точно не помню, сам на него наткнулся...
Насчет соединения в версию 3.х не помню, так что либо переходить на 4.х либо мучаться, как промежуточный вариант - попробовать поставить версию 3.х последнюю...
...
Рейтинг: 0 / 0
mysql и странности с индексами...
    #32686622
Andrey_9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Валентин К1) Какая версия MySQL у тебя используется?
На полях DateTime&TimeStamp известный баг с индексами, он поборен в 4.0.16 или 17, точно не помню, сам на него наткнулся...
Насчет соединения в версию 3.х не помню, так что либо переходить на 4.х либо мучаться, как промежуточный вариант - попробовать поставить версию 3.х последнюю...

Продолжаю мучиться... Используется последняя третья версия. (3.23.58).
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysql и странности с индексами...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]