Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja wyniku
daniel1302
post
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Witam, mam zapytanie które oznacza mi co drugi wynik pewną flagą.
Chodzi mi głównie o zapytanie SELECT. Dla 6 000-10 000 rekordów działa spoko. Ale jak spróbuję przeedytować tabelkę 500000 rekordów to juz jest problem
Moja tabelka
  1. id|email|status|flag

I w co drugim rekordzi potrzebuję mieć 1 a w co drugim 0 maksymalnie równo rozłożone rekordy. Sortuję po czasie dodania rekordu (czyli ID), Przykłodowo musze równo podzielić maile np z przed dwóch lat.

Skrypt jest częściej wykorzystywany. Obecnie nie poradziłem sobie z jego uruchomieniem. Robię to tak, że eksportuję w ekselu usuwam odpowiendie wiersze, a te pozostałe oznaczam flagą i importuje do innej tabelki.

  1. SET @rowNumber = 0;
  2.  
  3. UPDATE adresy SET flag=1 WHERE id IN (SELECT t.id
  4. FROM (
  5. SELECT DISTINCT email, `status`, id, @rowNumber := @rowNumber+ 1 AS rn
  6. FROM adresy
  7. WHERE `status` IN (1, 3)
  8. GROUP BY email ORDER BY id
  9. ) t
  10. WHERE t.rn % 2 = 0 ORDER BY t.rn )


Jak to zoptymalizować jak uruchomić na tabeli pół miliona rekordów nawet konsola się wiesza.

Ten post edytował daniel1302 26.01.2015, 18:25:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Jak chcesz szybko, to taki pomysł:
1. utwórz tabelę: ID AutoIncrement, tabID INT, Flag INT
2. przekopiuj do niej wartosci z twojej tabeli: INSERT INTO tabela (tabID) SELECT id FROM twoja_tabela
3. zupdejtuj tę nową tabelę: UPDATE tabela SET flag=(ID % 2)
4. załóż indeks na tabID
5. zupdejtuj swoją tabelę korzystając z tej
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 07:31