Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тормозит база... Как создать индекс? / 5 сообщений из 5, страница 1 из 1
24.12.2004, 14:46
    #32843947
Новичек123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормозит база... Как создать индекс?
Здравствуйте! Я делаю рейтинг сайтов, хочу на его основе также предоставлять небольшую статистику... Но столкнулся с тем, что ресурсов надо ой как много :) И т.к. в SQL я новичек, для меня это стало проблемой. Сейчас вот пытаюсь понять что такое индексы... Хотелось бы разобраться на конкретном примере.

Вот, например, есть у меня такие табличка в MySQL (синтаксис не соблюдаю):

table users (юзеры)
id int auto_increment (уникальный ключ)
name varchar(20) (имя юзера)


table pages (страницы)
id int auto_increment (уникальный ключ)
uid int (это идентификатор юзера)
posted int (11) (дата добавления записи в UNIX формате)
page varchar(250)
referer varchar(250)

Суть этих таблиц следующая. Таблица users - данные юзеров. Таблица pages - это просмотренные страницы на сайте юзера, где Posted - дата в виде числа (UNIX формат), page - адрес страницы и referer - ссылающаяся страница.

Задача - юзер заходит в систему под своим Id (допустим id=5). Далее ему нужно сделать отчет - "популярные страницы". То есть выбрать поля где uid=5, а поля такие:
page, count(page), сгруппировать по page и отсортировать по count(page)
По сути запрос выглядит так:

SELECT page, count(page) FROM pages WHERE uid='5' GROUP BY 1 ORDER BY 2 DESC;

При кол-ве записей больше 100 тыщ все начинает прилично так тормозить... Имхо решением проблемы является индекс. но я блин не умею их делать! :)

Так вот - как мне построить индекс, который бы позволял быстро выбирать такой запрос?
...
Рейтинг: 0 / 0
24.12.2004, 15:32
    #32844073
GunJah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормозит база... Как создать индекс?
Индексы имеет смысл создавать для тех полей которые идут после WHERE
Подробнее см здесь:
http://dev.mysql.com/doc/mysql/ru/MySQL_indexes.html
...
Рейтинг: 0 / 0
24.12.2004, 16:31
    #32844205
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормозит база... Как создать индекс?
Для начала попробуй

Код: plaintext
1.
create index bebebe on pages(uid);
...
Рейтинг: 0 / 0
25.12.2004, 14:11
    #32844854
Новичек123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормозит база... Как создать индекс?
Ды вы знаете, не особо это помогло.
на 100 отчетах без индексов среднее время выполнения 0.5 сек,
на 100 отчетах с индексов - 0,6 сек...
записей щаз 100 тыщ, для конкретного юзера (на котором тестили) - 10 тыщ.

может добавить индкс по posted ?
там идет выборка всегда.

вот конкретный запрос:

select * from table where uid=5 and posted>$posted and posted<$posted

....
...
Рейтинг: 0 / 0
27.12.2004, 22:50
    #32846895
Dinky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тормозит база... Как создать индекс?
Новичек123вот конкретный запрос:
select * from table where uid=5 and posted>$posted and posted<$posted

вот конкретный индекс для твоего запроса: `ix` (uid,posted)
создай, запусти с explain - посмотри
замечание номер раз: выбирать именно _все_ поля надо?
замечание номер два: если в резалтсете будут тысячи записей, все одно будет "тормозить" - чудес не бывает, надо время чтоб поднять данные с диска...

С Наступающим!
--
Dmitry
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тормозит база... Как создать индекс? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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