|
|
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
Добрый день! У меня есть простенький сервачок из системника, 4х ядерный AMD 2,6 и 8 гБ Озу. На нем стоит ubuntu и использую я его только под MySQL. У меня несколько таблиц такой структуры: NameN (CHAR (10)), ColN (CHAR (10)), Param (CHAR (5)). Это "разворот" таблицы из примерно 1000 NameN по вертикали и примерно 1000000 ColN по горизонтали. Каждое пересечение - значение. Весит каждая таблица несколько гБ. Используются они редко, чаще всего запрос из серии NameI - ColI. Естественно индексы я ставлю по обеим колонкам. Иногда (раз в сутки, вручную) мне требуется выполнить запрос: Select Distinct(NameN), Count(ColN) FROM TABLE GROUP BY NameN. И вот тут начинаются проблемы. Сервер пытается взять всю таблицу в оперативку и зависает. Грубо говоря, если колонок и имен мало, то это работает быстро. Explain выдает Using Temporary, Using Filesort. Да, движок InnoDB, в my.cnf внесено что размер озу для innodb 6G, предел кэша - 1G. Как ускорить вышеуказанный запрос? Выполнение 1-2 минуты такого запроса нормальное, сейчас он выполняется примерно 1,5 часа (!) при объеме 500 000 х 400 = 20 000 000 строк. Да, на машине с Oracle (проц похожий, 64гБ ОЗУ) выполняется те самые 1-2 минуты. Если строк под 100 миллионов, то 5 минут. Какое железо вообще должно быть под такую БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 13:48:26 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svaoЕстественно индексы я ставлю по обеим колонкам.Напрасно... maverik-svaoИногда (раз в сутки, вручную) мне требуется выполнить запрос: Код: sql 1. После GROUP BY значение поля NameN уже уникально. DISTINCT не имеет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 13:57:55 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svao, Поле ColN может быть NULL? А вообще покажите лучше DDL целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 14:11:26 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svao, Код: sql 1. 2. 3. авторКак ускорить вышеуказанный запрос? Да никак. Тут нет фильтра, поэтому группируется вся таблица. В лучшем случае нужно создать индекс по NameN, чтобы группировке не нужно было сортировать данные, но всё равно обрабатывается ВСЯ таблица, 1000 NameN по вертикали * 1,000,000 ColN = 1,000,000,000 записей (миллиард). Какую ещё скорость ты хочешь от этого запроса -- не понятно. Зачем тебе вся тыща NameN сразу -- тоже не понятно. И откуда у тебя миллион (!) колонок -- не понятно совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:10:10 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
MasterZiv1000 NameN по вертикали * 1,000,000 ColN = 1,000,000,000 записей (миллиард).Сфига? у него тупо EAV-like таблица, лям записей, 1к уникальных категорий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:17:51 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
Таблица такая Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну это "рулон" поля с клеточками, где по горизонтали люди (1000 человек), по вертикали параметры (1миллион), на пересечениях значения. Иногда значений не бывает, тогда такая тройка пропущена. Для того, чтобы понять, есть ли такие пропуски я и пользуюсь тем запросом: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:27:49 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svao, Перепишите запрос так: Код: sql 1. И покажите план этого запроса. P.S. Уже не первый раз вижу бессмысленную конструкцию distinct(PERSON_ID). Откуда вы ее берете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:32:47 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
miksoft, BANK_CVD55 1 SIMPLE index CVD55_PERSON_ID 153 25748507 Using index ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:40:59 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svaoТаблица такая Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну это "рулон" поля с клеточками, где по горизонтали люди (1000 человек), по вертикали параметры (1миллион), на пересечениях значения. Иногда значений не бывает, тогда такая тройка пропущена. Для того, чтобы понять, есть ли такие пропуски я и пользуюсь тем запросом: Код: sql 1. Сколько записей в ней ? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:41:52 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
MasterZiv Сколько записей в ней ? Код: sql 1. 25823444 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:47:24 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svaomiksoft, BANK_CVD55 1 SIMPLE index CVD55_PERSON_ID 153 25748507 Using indexА быстрее-то стало? И, кстати, зачем вам тип char ? более компактный тип нельзя использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 15:49:03 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
miksoft, более компактный - varchar? А разве он не удиняет запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 16:28:57 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svaoТаблица такаяЁпрст! а почему PERSON_ID имеет тип char(50)? неужели нет таблицы пёрсонов, где есть нормальный чисельный ключ? Да и SNP тоже выволочь бы в отдельную таблицу. И получится нормально работающая компактная структура... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 16:41:54 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svaomiksoft, более компактный - varchar?VARCHAR или INT, смотря какие данные внутри реально хранятся.maverik-svao А разве он не удиняет запрос?Тип поля разве как-то влияет на длину запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 17:07:04 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
AkinaДа и SNP тоже выволочь бы в отдельную таблицу.Это как? Если делать нормально, то SNP должен входить в первичный ключ. Кстати, отсутствие явного первичного ключа утяжеляет таблицу, если не ошибаюсь, еще на 6 байт на запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 17:09:27 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
miksoftAkinaДа и SNP тоже выволочь бы в отдельную таблицу.Это как?А, понял, как справочник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 17:10:06 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
Akinamaverik-svaoТаблица такаяЁпрст! а почему PERSON_ID имеет тип char(50)? неужели нет таблицы пёрсонов, где есть нормальный чисельный ключ? Да и SNP тоже выволочь бы в отдельную таблицу. И получится нормально работающая компактная структура... Да это мелочи всё, по сравнению с тем, что он обрабатывает 26 миллионов строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 21:37:18 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
maverik-svaoMasterZivСколько записей в ней ? Код: sql 1. 25823444 Сколько записей на одно PERSON_ID ? Поровну, по 26 тыщ записей ? Тогда ПО ТРЕБОВАНИЮ бери и выполняй этот запрос ДЛЯ ОДНОГО PERSON_ID. Естественно, нужно создать индекс для этого по PERSON_ID, если его ещё нет. Кстати: Код: sql 1. 2. 3. 4. 5. 6. 7. должен быть первичный ключ по (PERSON_ID, SNP, AB) Где он ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 21:45:44 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
MasterZivдолжен быть первичный ключ по (PERSON_ID, SNP, AB)C таким первичным ключом и таблицы не надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 22:00:20 |
|
||
|
Вопрос про Distinct и ресурсы
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivдолжен быть первичный ключ по (PERSON_ID, SNP, AB)C таким первичным ключом и таблицы не надо... Ну если он InnoDB будет использовать, он всё равно кластерным будет, так что таблица и ключ -- будет одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 22:04:37 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38910152&tid=1833410]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 369ms |

| 0 / 0 |
