2015-01-20 4 views
-2

У меня есть таблица с: ID, pointId, pointValue с около 10.000.000 строк.Снизить записи рассчитывать в MySQL

Я должен уменьшить его, удалив 90% строк, поэтому мне нужно оставить каждую десятую запись и удалить любой другой.

Использование id из таблицы не очень хорошая идея, потому что это не последовательность последовательных номеров.

Как это сделать по запросу?

+1

Так что просто удалите случайные записи? –

+0

Если вам нужны «случайные» значения, не имеет значения, будет ли у вас больше или меньше записей, я думаю, вы можете удалить все строки, где «MOD (id, 10)! = 0'. Конечно, он может вернуть 985.000 или 1.003.000 записей, не имеет значения? – panther

+0

@panther, но я не могу использовать ** id **, лучше будет использовать номер строки, но как это сделать? – ELP24

ответ

1

Я не уверен, почему вам действительно нужно удалить столько миллионов записей.
Но следующий подход может вам помочь.

Вы можете создать динамический 'row_number', на основании которого можно фильтровать каждый 10th строку и удалить остальные записей.

Пример:

Предполагая, что имя таблицы 'points_table'.

delete from points_table 
where id NOT IN (
    select id from (
    select @rn:[email protected]+1 as row_num, p.id 
     from points_table p, (select @rn:=0) rn 
    ) list_of_ids_to_be_deleted 
    where row_num % 10 = 0 
) 
0

Вы можете попробовать: -

DELETE FROM TABLE_NAME 
WHERE ID NOT IN 
(SELECT ID FROM (SELECT @RN:[email protected]+1, ID, POINTID, POINTVAL 
       FROM TABLE_NAME, (SELECT @RN:=0) T) T1 
       WHERE MOD(@RN,10) = 0) 

Это может помочь вам.

0

Простое решение, которое должно удалить 90% ваших строк, если у вас 10 миллионов строк.

DELETE FROM MyTable WHERE Id IN (SELECT Id FROM MyTable LIMIT 9000000); 
Смежные вопросы