|
|
|
Тормозит база... Как создать индекс?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Я делаю рейтинг сайтов, хочу на его основе также предоставлять небольшую статистику... Но столкнулся с тем, что ресурсов надо ой как много :) И т.к. в 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 тыщ все начинает прилично так тормозить... Имхо решением проблемы является индекс. но я блин не умею их делать! :) Так вот - как мне построить индекс, который бы позволял быстро выбирать такой запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 14:46 |
|
||
|
Тормозит база... Как создать индекс?
|
|||
|---|---|---|---|
|
#18+
Индексы имеет смысл создавать для тех полей которые идут после WHERE Подробнее см здесь: http://dev.mysql.com/doc/mysql/ru/MySQL_indexes.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 15:32 |
|
||
|
Тормозит база... Как создать индекс?
|
|||
|---|---|---|---|
|
#18+
Для начала попробуй Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 16:31 |
|
||
|
Тормозит база... Как создать индекс?
|
|||
|---|---|---|---|
|
#18+
Ды вы знаете, не особо это помогло. на 100 отчетах без индексов среднее время выполнения 0.5 сек, на 100 отчетах с индексов - 0,6 сек... записей щаз 100 тыщ, для конкретного юзера (на котором тестили) - 10 тыщ. может добавить индкс по posted ? там идет выборка всегда. вот конкретный запрос: select * from table where uid=5 and posted>$posted and posted<$posted .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2004, 14:11 |
|
||
|
Тормозит база... Как создать индекс?
|
|||
|---|---|---|---|
|
#18+
Новичек123вот конкретный запрос: select * from table where uid=5 and posted>$posted and posted<$posted вот конкретный индекс для твоего запроса: `ix` (uid,posted) создай, запусти с explain - посмотри замечание номер раз: выбирать именно _все_ поля надо? замечание номер два: если в резалтсете будут тысячи записей, все одно будет "тормозить" - чудес не бывает, надо время чтоб поднять данные с диска... С Наступающим! -- Dmitry ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 22:50 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32844854&tid=1854476]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
172ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 437ms |

| 0 / 0 |
