Miejmy prosty zestaw produktów. Każdy produkt ma swój unikalny identyfikator i kategorię. Użytkownicy często wyszukują według kategorii, więc chcę podzielić produkty według kategorii. Każda kategoria w jednej partycji, np.Jak podzielić tabelę MySQL według kolumny, której nie ma w unikalnym indeksie?
Jak to zrobić? Ponieważ oczywiście mam klucz podstawowy w kolumnie ID i potrzebuję unikalnego identyfikatora. Niepowtarzalny w każdej kategorii.
Jednak partitiong ma to ograniczenie, że "każdy unikalny klucz w tabeli musi używać każdej kolumny w wyrażeniu partycjonowania tabeli".
Cóż, czy to nie sprawia, że partycjonowanie jest bezużyteczne? Czy może czegoś brakuje? Co powinienem zrobić?
http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html
Jasne, ale id nie będzie wówczas unikalny ale tylko unikatowe w kategorii, których nie chcę. Replace Into przestanie wtedy działać. W przypadku, gdy kategoria produktu ulegnie zmianie, produkt zostanie zduplikowany. Ale w każdym razie, dzięki za twoją odpowiedź. –
Nie. Dodanie pola do klucza podstawowego nie może sprawić, że stanie się to non_unique, jak napisałem w mojej odpowiedzi. Dlaczego po prostu nie spróbujesz zobaczyć, że to działa? Użyłem tej partycji na dużej tabeli dziennika (od 2 do 5 milionów rekordów) do partycjonowania w ciągu dnia: pozwala bardzo szybko "SELECT" w ciągu dnia, i bardzo szybko usunąć wszystkie rekordy dla danego dnia (po prostu upuszczając partycję). – Jocelyn
O nie, wiem, że KLAWISZ PRIMARY nadal będzie wyjątkowy. Ale identyfikator, który teraz będzie tylko częścią klucza, przestanie być unikalny, ponieważ inna wartość w kolumnie kategorii może spowodować, że klucz będzie unikalny, chociaż ID będzie taki sam. Wygląda jednak na to, że MySQL działa właśnie tak (choć nie ma to większego sensu) i będę musiał z tym żyć. W każdym razie, dzięki za twój wysiłek. –