Korzystanie z MySql. Mam tabelę użytkowników i muszę przechowywać pozycję użytkownika w jednej z kolumn. Aplikacja określa pozycję i okazuje się, że jest to liczba zmiennoprzecinkowa. Przykładem rang byłoby:
7732.5366604
7733.0252967
7740.8813879
-7736.5642667
-42.0223467
81121.3647382
Więc w zasadzie zawsze mam co najmniej siedem miejsc po „.” i numer jest podpisany.
Muszę utworzyć indeks w tym polu i uporządkować według niego.
Z tego, co rozumiem, mam 2 możliwości:
Zapisz numer tak, jak jest w najbardziej odpowiednim typie mysql (liczba zmiennoprzecinkowa?)
sformatuj wartość, aby usunąć kropkę (wwarstwa aplikacji) i zapisz ją jako podpisaną bigint, aby -7736.5642667 stał się -77365642667. Gdybym z jakiegoś powodu nie miał 7 miejsc po kropce, dodałbym zera, aby: 234,34565 stałoby się 234,4556500, a następnie 2343456500
Zastanawiam się, który z nich byłby szybszy pod względem przechowywania, indeksowania i sortowania.
Dziękujemy i doceniamy wszelkie uwagi.
Odpowiedzi:
0 dla odpowiedzi № 1Nie rozumiem algorytmu stojącego za indeksemwarunki różnicy między indeksowaniem int i float, ale zrobiłbym test porównawczy na dużym zestawie danych. Jeśli nie ma różnicy w wydajności, użyłbym liczby zmiennoprzecinkowej, ponieważ to twoje liczby i nie musisz wykonywać żadnego formatowania.