EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

SQL-запрос. Часто встречающиеся ключи
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
SQL-запрос. Часто встречающиеся ключи
Автор Сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Вт, 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
Заранее спасибо.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артур
11 1110 1000
11 1110 1000


Зарегистрирован: 22.01.2008
Сообщения: 1163
Откуда: Lietuva
7497 Монеты

СообщениеДобавлено: Вт, 13 Янв, 2009 18:45    Заголовок сообщения: Ответить с цитатой

А вы хотите запросами его выбрать или можно получить всю таблицу и ПХП его выберет?

Просто я когда-то писал скрипт который берет самые часто встречающиеся
_________________
Скрипты [PHP/JS] на заказ, в ЛС, недорого.

SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Вт, 13 Янв, 2009 18:49    Заголовок сообщения: Ответить с цитатой

Нет. имеется ввиду чистый SQL.
Там таблица 630mb
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 353

13058 Монеты

СообщениеДобавлено: Вт, 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
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Вт, 13 Янв, 2009 18:57    Заголовок сообщения: Ответить с цитатой

есть такая партия.
закрыто.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Вт, 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


В зависимости хотите вы выбрать все записи встречающие более десяти раз или двадцать самых популярных записей

З.Ы. В синтаксе могу ошибится, нет возможности проверить запросы
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 353

13058 Монеты

СообщениеДобавлено: Вт, 13 Янв, 2009 21:22    Заголовок сообщения: Ответить с цитатой

Нет предела совершенству
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 06:06    Заголовок сообщения: Ответить с цитатой

girafenok писал(а):
Нет предела совершенству

Вопрос не в свершенстве, а в том что ваш запрос вернет по одной записи на аттрибут, если таблица 630 мб есть шанс что таких записей будет очень много.
И второй и первый запрос очень затратные по ресурсам, особенно если по полю atr не индекса, так как MYSQL должен перебрать все записи таблицы. Если это не разовая операция рекомендую сначала построить индекс по полю atr.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 06:43    Заголовок сообщения: Ответить с цитатой

Веденин
а как корректно в этом случае проставить индексы?
Ничего на ум не приходит
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 07:03    Заголовок сообщения: Ответить с цитатой

просто создать индекс по полю atr, по идее count(atr) при наличии индекса по полю atr должен выполнятся во много раз быстрее, так как сам индекс по идее хранит кол-во записей по каждому уникальному значению уже отсортированное по значению atr, кроме того размер индекса во много раз меньше размера таблицы.
Можете попробовать посчитать время с индексом и без него и сравнить результаты.
Да если этот запрос реально часто будет использоваться, возможно стоит применять какие-то другие методы, например временную таблицу где периодически копируется информации из этого запроса.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 09:25    Заголовок сообщения: Ответить с цитатой

дело в том, что в таблице всего 3 поля. id name atr
а выборка из нее производится человеком.
Не думаю, что в этом случае такое индексирование имеет смысл.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 09:48    Заголовок сообщения: Ответить с цитатой

lazutov писал(а):
дело в том, что в таблице всего 3 поля. id name atr
а выборка из нее производится человеком.
Не думаю, что в этом случае такое индексирование имеет смысл.

Если время выборки не велико и не напрягает человека смысла нет, если же ждать приходится реально долго лучше сделать индекс

P.S. Кол-во полей большого значения не имеет с индексом все равно должно работать значительно быстрее даже если там всего одно поле Very Happy
P.P.S. А провести тестирование не можете? Добавление индекса не должно быть ну очень долгим, если не нужен можно потом удалить
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 09:51    Заголовок сообщения: Ответить с цитатой

нет не могу это сделать пока бд заполняется.
Заполнится дней через 15.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 10:19    Заголовок сообщения: Ответить с цитатой

а запрос сколько времени выполняется?
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Ср, 14 Янв, 2009 11:16    Заголовок сообщения: Ответить с цитатой

Сами запросы - секунда.
Но запросов нужно почти 2 миллиона.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group