|
SQL-запрос. Часто встречающиеся ключи
|
| Автор |
Сообщение |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
Добавлено: Вт, 13 Янв, 2009 17:56 Заголовок сообщения: SQL-запрос. Часто встречающиеся ключи |
|
|
Для наглядности:
| Код: |
+-----+-------+------+
|id |name |atr |
+-----+-------+------+
|12 |fio1 |123 |
|13 |fio2 |555 |
|14 |fio3 |333 |
|15 |fio4 |123 |
|16 |fio5 |666 |
+-----+-------+------+ |
Итак: есть табличка приведенного выше вида.
Задача: в наименьшее количество запросов выбрать самые часто встречающиеся атрибуты(ATR).
id-ключ, автоинкремент.
name - вообще не причем. Поставлено для примера.
atr - и есть тот самый атрибут. Он не обязательно числовой.
:2000
Заранее спасибо. _________________ сервис DNS | разные http, DNS и прочие утилиты |
|
| Вернуться к началу |
|
 |
Артур 11 1110 1000


Зарегистрирован: 22.01.2008 Сообщения: 1159 Откуда: Lietuva 7191 
|
Добавлено: Вт, 13 Янв, 2009 18:45 Заголовок сообщения: |
|
|
А вы хотите запросами его выбрать или можно получить всю таблицу и ПХП его выберет?
Просто я когда-то писал скрипт который берет самые часто встречающиеся _________________ Скрипты [PHP/JS] на заказ, в ЛС, недорого.
SAPE |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
girafenok Два пингвиненка


Зарегистрирован: 17.11.2007 Сообщения: 333
11827 
|
Добавлено: Вт, 13 Янв, 2009 18:54 Заголовок сообщения: |
|
|
SELECT atr, count(atr) FROM items GROUP BY atr ORDER BY count(atr) desc
Выдаст примерно следующее следующее:
123 2
555 1
333 1
666 1 |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Вт, 13 Янв, 2009 19:31 Заголовок сообщения: |
|
|
Не правильно, запрос
| Код: | | SELECT atr, count(atr) FROM items GROUP BY atr ORDER BY count(atr) desc |
выдаст все записи сгрупированные по коичеству правильнее
| Код: | | SELECT atr, count(atr) as cnt FROM items GROUP BY atr ORDER BY cnt desc having cnt>10 |
или
| Код: | | SELECT atr, count(atr) as cnt FROM items GROUP BY atr ORDER BY cnt desc limit 0,20 |
В зависимости хотите вы выбрать все записи встречающие более десяти раз или двадцать самых популярных записей
З.Ы. В синтаксе могу ошибится, нет возможности проверить запросы _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
girafenok Два пингвиненка


Зарегистрирован: 17.11.2007 Сообщения: 333
11827 
|
Добавлено: Вт, 13 Янв, 2009 21:22 Заголовок сообщения: |
|
|
| Нет предела совершенству |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Ср, 14 Янв, 2009 06:06 Заголовок сообщения: |
|
|
| girafenok писал(а): | | Нет предела совершенству |
Вопрос не в свершенстве, а в том что ваш запрос вернет по одной записи на аттрибут, если таблица 630 мб есть шанс что таких записей будет очень много.
И второй и первый запрос очень затратные по ресурсам, особенно если по полю atr не индекса, так как MYSQL должен перебрать все записи таблицы. Если это не разовая операция рекомендую сначала построить индекс по полю atr. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Ср, 14 Янв, 2009 07:03 Заголовок сообщения: |
|
|
просто создать индекс по полю atr, по идее count(atr) при наличии индекса по полю atr должен выполнятся во много раз быстрее, так как сам индекс по идее хранит кол-во записей по каждому уникальному значению уже отсортированное по значению atr, кроме того размер индекса во много раз меньше размера таблицы.
Можете попробовать посчитать время с индексом и без него и сравнить результаты.
Да если этот запрос реально часто будет использоваться, возможно стоит применять какие-то другие методы, например временную таблицу где периодически копируется информации из этого запроса. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
Добавлено: Ср, 14 Янв, 2009 09:25 Заголовок сообщения: |
|
|
дело в том, что в таблице всего 3 поля. id name atr
а выборка из нее производится человеком.
Не думаю, что в этом случае такое индексирование имеет смысл. _________________ сервис DNS | разные http, DNS и прочие утилиты |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Ср, 14 Янв, 2009 09:48 Заголовок сообщения: |
|
|
| lazutov писал(а): | дело в том, что в таблице всего 3 поля. id name atr
а выборка из нее производится человеком.
Не думаю, что в этом случае такое индексирование имеет смысл. |
Если время выборки не велико и не напрягает человека смысла нет, если же ждать приходится реально долго лучше сделать индекс
P.S. Кол-во полей большого значения не имеет с индексом все равно должно работать значительно быстрее даже если там всего одно поле
P.P.S. А провести тестирование не можете? Добавление индекса не должно быть ну очень долгим, если не нужен можно потом удалить _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
|