powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как лучше всего исключить повторяющиеся значения в каждой колонке таблицы?
2 сообщений из 27, страница 2 из 2
Как лучше всего исключить повторяющиеся значения в каждой колонке таблицы?
    #39504167
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyрабоает медленно.У меня "зачистка" 1кк записей при 3 полях в поствариабельностью 70% выполняется 38 секунд. В то время как каждый из запросов из 20711617

А к чему "Возможно, кому-то пригодится, вот так решил задачу с денулификацией.", я что-то вообще не въехал...
...
Рейтинг: 0 / 0
Как лучше всего исключить повторяющиеся значения в каждой колонке таблицы?
    #39504201
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaiMrTidyрабоает медленно.У меня "зачистка" 1кк записей при 3 полях в поствариабельностью 70% выполняется 38 секунд. В то время как каждый из запросов из 20711617

А к чему "Возможно, кому-то пригодится, вот так решил задачу с денулификацией.", я что-то вообще не въехал...
14 тыс. записей 78 колонок заняло примерно 20 секунд вот таким методом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
DELIMITER $$
DROP PROCEDURE IF EXISTS spNullifyRedundancy$$
CREATE PROCEDURE spNullifyRedundancy()
BEGIN

SET SQL_SAFE_UPDATES = 0;

drop temporary table if exists t;
create temporary table if not exists t as (
	SELECT column_name, @rnk := @rnk + 1 as rnk
	FROM INFORMATION_SCHEMA.COLUMNS as i, (select @rnk := 0) as v
	WHERE TABLE_SCHEMA = '..db...' AND TABLE_NAME = '...tbl...' and is_nullable = 'yes'
);
set @i = (select count(*) from t);

while @i > 0 do
	set @c = (select t.column_name from t where t.rnk = @i);
    set @prevVal = '';
	set @q = replace('
		update ...tbl... as l
			join (
				select id, r
                                from (
					SELECT id ,@prevVal != @c as r ,@prevVal := @c as v
					FROM ...tbl... as l, (select @prevVal := null) as v
					where @c is not null
					order by l.id
					) as t
				where r = 0
				) as t on l.id = t.id
		set @c = null
		', '@c', @c);
	prepare s from @q;
	execute s;
	deallocate prepare s;
    set @i = @i - 1;
end while;

end$$
DELIMITER ;


Аналогичный результат в C# занял около 200мс.

Чтобы потом проще работать с данными потребуется процедура восстановления, которой я и поделился.
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как лучше всего исключить повторяющиеся значения в каждой колонке таблицы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]