The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"mysql использование ключей тип range"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"mysql использование ключей тип range"  
Сообщение от Васька (??) on 23-Янв-07, 18:23 
Добрый день,

есть простинький запрос и большая таблица:
select * from t1 where id=4 and time>1 and time<100

на такой запрос explain пишет
type: ref
possible_keys: id,time
key: id

если убрать из запроса id то получим
select * from t1 where time>1 and time<100
type: range
possible_keys: time
key: time

Т.е. в первом случае он не использует индекс по столбцу time
и переберает все значения с id=4. Как правильно составить запрос
и проиндексировать таблицу? Поможет ли создание индекса по 2-м столбцам?
Таблица очень большая, и постоянно используется
поэксперементировать не получается :(

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "mysql использование ключей тип range"  
Сообщение от BigHo on 24-Янв-07, 12:01 
>Добрый день,
>
>есть простинький запрос и большая таблица:
>select * from t1 where id=4 and time>1 and time<100
>
>на такой запрос explain пишет
>type: ref
>possible_keys: id,time
>key: id
>
>если убрать из запроса id то получим
>select * from t1 where time>1 and time<100
>type: range
>possible_keys: time
>key: time
>
>Т.е. в первом случае он не использует индекс по столбцу time
>и переберает все значения с id=4. Как правильно составить запрос
>и проиндексировать таблицу? Поможет ли создание индекса по 2-м столбцам?
>Таблица очень большая, и постоянно используется
>поэксперементировать не получается :(

Поскольку не приведена информация о полях таблицы, приходится только догадываться. Рискну предположить, что id - первичный ключ, и в этом случае из всех равных ключей будет использоваться именно он. Для указания, какой ключ лучше использовать, или не использовать можно использовать USE INDEX(time) или IGNORE INDEX(id) соответсвенно после select * from t1.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "mysql использование ключей тип range"  
Сообщение от Васька (??) on 24-Янв-07, 13:35 
CREATE TABLE t1 (
id int(11) not null,
time int UNSIGNED default '0',
KEY id (id),
KEY time (time)
) TYPE=InnoDB;

Уникальных и первичных ключей нет.
попробовал добавить USE INDEX(time) тогда он перестает использовать индекс id
если написать USE INDEX(id,time) то использует _только_ индекс id

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "mysql использование ключей тип range"  
Сообщение от BigHo on 24-Янв-07, 13:44 
>CREATE TABLE t1 (
>id int(11) not null,
>time int UNSIGNED default '0',
>KEY id (id),
>KEY time (time)
>) TYPE=InnoDB;
>
>Уникальных и первичных ключей нет.
>попробовал добавить USE INDEX(time) тогда он перестает использовать индекс id
>если написать USE INDEX(id,time) то использует _только_ индекс id

Тогда вообще надо было делать не так. Если time совместно с id должен образоывать уникальный ключ (по идее должна быть какая-то соввокупность полей, которая может обеспечить уникальность строки):

CREATE TABLE t1 (
id int(11) not null,
time int UNSIGNED NOT NULL default '0', -- здесь not null - требование PK
PRIMARY KEY (time, id),
KEY id (id)
) TYPE=InnoDB;

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "mysql использование ключей тип range"  
Сообщение от Аноним on 24-Янв-07, 13:51 
>Тогда вообще надо было делать не так. Если time совместно с id
>должен образоывать уникальный ключ (по идее должна быть какая-то соввокупность полей,
>которая может обеспечить уникальность строки):
>
>CREATE TABLE t1 (
>id int(11) not null,
>time int UNSIGNED NOT NULL default '0', -- здесь not null -
>требование PK
>PRIMARY KEY (time, id),
>KEY id (id)
>) TYPE=InnoDB;

Хинт: как ты вообще представляешь себе использование сразу двух ключей в одном запросе?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "mysql использование ключей тип range"  
Сообщение от Васька (??) on 24-Янв-07, 14:21 
>
>Хинт: как ты вообще представляешь себе использование сразу двух ключей в одном
>запросе?

/me почесал репу

Действительно тупанул...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру