SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.06.2013 22:41:13

Taxist
Участник
Зарегистрирован: 02.06.2013
Сообщений: 3

Вопрос знатокам! База InnoDb 20 000 000 строк

Добрый вечер!
Интересует мнение специалистов, так как сам могу квалифицировать свои знания как начинающий :-)

Есть таблица на InnoDb, три столбца , 20 000 000 строк файл ibdata1=10Gb

Вопрос:
Возможно ли организовать SELECT по одному столбцу, чтоб время ответа было мене 2сек ?? Своими силами не получается, удалось только за 40сек это критически неприемлемо, INDEX есть по всем трем столбцам, что еще можно предпринять?? моих знаний явно не хватает? помогите пож..

Отредактированно Taxist (02.06.2013 22:44:50)

Неактивен

 

#2 03.06.2013 11:11:10

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Вопрос знатокам! База InnoDb 20 000 000 строк

Индекс по всем трём стобцам - это один индекс, содержащий 3 столбца или 3 индекса на каждый столбец? Судя по времени выполнения, вероятно один индекс с тремя столбцами, в таком случае выборку Вы делаете по полю, которое находится не на первом месте в этом индексе, а значит этот индекс не даёт никакого преимущества.

Для более полной картины покажите структуру таблицы и сам запрос.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 03.06.2013 21:46:33

Taxist
Участник
Зарегистрирован: 02.06.2013
Сообщений: 3

Re: Вопрос знатокам! База InnoDb 20 000 000 строк

Больщое спасибо за ответ! Этого я действительно не знал.. попробую поменять местами

Индекс один содержащий три столбца в себе:
PRIMARY KEY (`ART_ID`, `BRANDS`, `CODE`)

Запрос на выборку выглядит вот так:
SELECT BRANDS FROM `TABLE` WHERE CODE='".$NUMBER2."' GROUP BY BRANDS
таким образом результат выборки будет список названий брэндов у которых в ассортименте артикулов есть полное совпадение с искомым номером артикула
как видно из запроса поиск веду по CODE а он на самом деле не первый в Index

Сразу же возник вопрос, если ли процедура по перестановке порядка столбцов в Index без удаления индекса таблицы с последующим созданием нового с верным порядком?

Отредактированно Taxist (03.06.2013 21:56:02)

Неактивен

 

#4 03.06.2013 22:05:37

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Вопрос знатокам! База InnoDb 20 000 000 строк

Мне известна только одна процедура: удаление старого индекса и создание нового. Время не стоит на месте, может выдумали возможность просто апдейтнуть значения индекса, хотя не уверен smile

В Вашем случае лучше всего будет работать индекс с таким порядком: `code`, `brands`, `art_id`. Но при этом не забывайте и про другие запросы к этой таблице, если они есть. Можно также добавить новый индекс KEY(`code`,`brands`), табличка конечно прибавит в весе и запись в неё несколько увеличится по времени, но Вашу проблему это решит.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#5 04.06.2013 00:02:38

Taxist
Участник
Зарегистрирован: 02.06.2013
Сообщений: 3

Re: Вопрос знатокам! База InnoDb 20 000 000 строк

Подправил последовательность столбцов индекса, теперь запрос отвечает менее чем за пол секунды, результат достигнут ОГРОМНОЕ СПАСИБО за помощь! Вы просто молодцы ребята!!! :-)) И самое главное что делитесь знаниями, отличный форум и форумчане !!:-)))

Неактивен

 

#6 04.06.2013 08:08:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вопрос знатокам! База InnoDb 20 000 000 строк

Taxist, посмотрите FAQ №5

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson