Główne założenie tego co chcę zrobić to możliwość przypisania losowego kodu (składającego się z 5 cyfr) dla obiektu. Mam dwa wyjścia:
- losować aż trafię na wolny numer, jednak im więcej wykorzystanych kodów tym więcej powtórzeń i czas może rosnąć nieprzewidywalnie
- skorzystać z tabeli będącej pulą wolnych kodów, wybrać losowy wiersz i go usunąć, jednak najpierw trzeba tą tabelę zasilić wpisami i o to mi się w tym poście rozchodzi
Napisałem sobie procedurę, która wypełni te dane, ale strasznie wolno to idzie (tabela codes składa się z jednej kolumny int będącej unikalnym kluczem).
DELIMITER $$
DROP PROCEDURE IF EXISTS CodeGenerator$$
CREATE PROCEDURE CodeGenerator()
BEGIN
DECLARE `from` INT;
DECLARE `to` INT;
SET `from` = 10000;
SET `to` = 99999;
WHILE `from` <= `to` DO
INSERT IGNORE INTO `codes` SET `code` = `from`;
SET `from` = `from` + 1;
END WHILE;
END$$
DELIMITER ;
CALL CodeGenerator();
DROP PROCEDURE CodeGenerator;
Utworzenie tego to jakaś godzina mielenia, trochę za długo jak na skrypt instalacyjny :U. Zastanawiam się teraz czy takie rozwiązanie ma sens, czy może lepiej ręcznie utworzyć duży wpis z masą insertów (ładujący kilka tysięcy w jednym zapytaniu)? To pewnie byłoby szybsze, tylko plik wielki, a może macie lepszy pomysł jak problem rozwiązać?