powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тормозит база... Как создать индекс?
5 сообщений из 5, страница 1 из 1
Тормозит база... Как создать индекс?
    #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
Тормозит база... Как создать индекс?
    #32844073
Фотография GunJah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индексы имеет смысл создавать для тех полей которые идут после WHERE
Подробнее см здесь:
http://dev.mysql.com/doc/mysql/ru/MySQL_indexes.html
...
Рейтинг: 0 / 0
Тормозит база... Как создать индекс?
    #32844205
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала попробуй

Код: plaintext
1.
create index bebebe on pages(uid);
...
Рейтинг: 0 / 0
Тормозит база... Как создать индекс?
    #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
Тормозит база... Как создать индекс?
    #32846895
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичек123вот конкретный запрос:
select * from table where uid=5 and posted>$posted and posted<$posted

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

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


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