|
Помогите с простым запросом | ☑ | ||
|---|---|---|---|---|
|
0
DirecTwiX
27.03.13
✎
01:09
|
Таблица
user item У одного юзера несколько итемов. Вот запрос для получения пользователей с итемом 13 (выполняется доли секунды):
Нужен запрос для получения первых N юзеров, у которых нет итема 13. Осложняется всё тем, что в базе 20млн строк. Пробовал: 1) левое соединение с той же таблицей по юзеру (on a.u = b.u and b.i = 13), а дальше WHERE b.u is NULL 2) Where u NOT IN (запрос выше) 3) Пока самое оптимальное, что придумал это выбрать первые N + M юзеров и левым соединением отбросить M. Тут М - это количество юзеров, у которых есть итем 13. Но такое удовольсвие не очень устраивает, т.к. база растёт, и выбирать N+M элементов становиться всё труднее |
|||
|
1
DirecTwiX
27.03.13
✎
01:12
|
А поражает меня время выполнения первого способа. Нет бы соединять пока не превысим лимит (LIMIT N), но надо сначала сджойнить 20млн строк, а только потом взять лимит..
|
|||
|
2
1Сергей
27.03.13
✎
07:54
|
SELECT FIRST 20
user FROM owners WHERE item <> 13 |
|||
|
3
Wobland
27.03.13
✎
07:55
|
(2) таблица:
юзер1 - 12 юзер1 -13 твой запрос выдаст юзера1. а автору этого не надо. если я правильно понял, конечнл |
|||
|
4
Wobland
27.03.13
✎
07:57
|
нот ин (селект), по-моему, самое то
|
|||
|
5
DirecTwiX
27.03.13
✎
13:30
|
(4) Да, запрос выглядит нормально, но выполняется 100+ секунд..
Как заставить работать лимит сразу?) |
|||
|
6
Злой Бобр
27.03.13
✎
20:37
|
(0) TOP N
|
|||
|
9
Fragster
гуру
27.03.13
✎
20:41
|
SELECT DISTINCT ... WHERE поле NOT IN (...) LIMIT
|
|||
|
10
Fragster
гуру
27.03.13
✎
20:43
|
||||
|
11
magicSan
27.03.13
✎
20:43
|
(3) во вложеном групировать
|
|||
|
12
Fragster
гуру
27.03.13
✎
20:44
|
ORDER BY первичный ключ
|
|||
|
13
magicSan
27.03.13
✎
20:49
|
(0) самый дельный совет сделать вторую таблицу в которой уже отобранные данные которые меняются при корректировки первой таблицы
|
|||
|
14
DirecTwiX
27.03.13
✎
20:57
|
(6) Это и есть LIMIT в MySQL
(11) Что группировать? (12) 130 секунд. А внутренний за 10 первый раз выполняется.. В статье написано, что DISTINCT должно быть достаточно. За статью спасибо - пригодится (13) Что в таблице? Если правильно понимаю, то её размер будет count(user)*count(item) - дорогое удовольствие, которое производительность грохнет ещё.. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |