2010-01-21 18 views
24

Ucząc mysql, czytałem, że można wykonać następujące oświadczenie podczas dodawania kolumny do tabeli mysql:Czy kolejność kolumn ma znaczenie w tabelach MySQL?

ALTER TABLE contacts ADD email VARCHAR(60) AFTER name; 

lub

ALTER TABLE contacts ADD email VARCHAR(60) FIRST; 

Kiedy chcesz to zrobić? Czy kolejność kolumn może być wykorzystana do celów optymalizacji zapytań? Czy longbloby powinny być ostatnią kolumną, aby zoptymalizować zużycie przestrzeni? A może te polecenia istnieją z jakiegoś innego powodu?

+0

Nigdy nie zauważyłem różnicy w wydajności, ale nigdy nie testowałem. Zawsze myślałem, że to przede wszystkim użyteczność, pozwalając mi ustawić kolumny w logicznej kolejności, nawet jeśli wrócę i dodam później. – ceejayoz

+2

Zobacz http://stackoverflow.com/questions/894522/is-there-any-reason-to-worry-- -chumn-order-inable-, co sugeruje, że ma wpływ na wydajność. – Matchu

Odpowiedz

0

Nie, nie powinno to mieć znaczenia. Znormalizowana baza danych również nie powinna mieć ograniczeń dotyczących kolejności kolumn.

6

Będzie to jednak miało wpływ na kolejność wyników w select * from mytable.

Dlatego zawsze powinieneś nazwać kolumnę w instrukcji select, np. select col1, col2 from mytable. Ale jeśli wiesz, że aplikacja używa numeru *, musisz zachować ostrożność podczas dodawania kolumny.

W przeciwnym razie zamów kolumnę tak, aby była jak najbardziej logiczna do zrozumienia. Jeśli ma wpływ na perf, oznacza to, że jesteś już po ciemnej stronie dostrajania wydajności bazy danych i prawdopodobnie masz problem gdzie indziej.

0

kolejność kolumn nie ma znaczenia. Jest to czysto wygodna funkcja. tylko po to, aby umożliwić restrukturyzację tabeli bazy danych w dowolny sposób po jej utworzeniu.

0

Model relacyjny nie ma koncepcji porządkowania kolumn w wierszach ani koncepcji porządkowania wierszy w tabelach.

6

Pytanie nie ma nic wspólnego z modelem relacyjnym lub SQL. To jest pytanie dotyczące wydajności.

W niektórych bazach danych bardziej wydajne jest zamawianie kolumn w określony sposób ze względu na sposób, w jaki odbywa się dostęp do dysku. To, czy istnieją znaczące korzyści, zależy również od platformy. Jest to niski i/o problem związany ze sposobem, w jaki projektowana jest pamięć masowa i mechanizm dostępu do niej przez silnik. Prawnie zastrzeżeni dostawcy silników dostarczają te informacje za pośrednictwem swoich działów edukacji i szkoleń.

Wydaje mi się, że musiałbyś porozmawiać z kimś, kto zna dokładne szczegóły modelu przechowywania i metody i/o dla MySQL na twojej platformie lub kogoś, kto ma to zaznaczone na twojej platformie, aby uzyskać odpowiedź.

Jest to całkowicie możliwe, że złożyć je na dysku w sposób zoptymalizowany i ukryć, że kolejność kolumn od ciebie.

1

Wydawało mi się, że nie ma ona żadnego wpływu na wydajność, ale w niektórych przypadkach - podczas korzystania z indeksów.

Przykład.

Użyłem dołączyć tabelę:

| category_id | user_id | 

Obie kolumny unsigned int (10) i primary key (category_id, user_id) zwrócić uwagę na kolejność kolumn. Kiedy zacząłem wybierać z tego stołu z where user_id = ? - wydajność była niska.

Po tym, jak zmieniłem kolejność kolumn (najpierw zrobiłem user_id) zaczęło się wybieranie razy szybciej.

+1

http://dev.mysql.com/doc/refman/5.6/en/multiple-column-indexes.html – NovaDenizen

+2

Kolejność kolumn w złożonym indeksie ma znaczenie - ale to nie ma nic wspólnego z kolejnością kolumn w tabeli . (Stąd ta "odpowiedź" nie odnosi się do "pytania"). –

1

"Kiedy chciałbyś użyć tego" zamiast problemu z wydajnością.

Replikacja na podstawie wiersza zostanie złamana, jeśli kolejność kolumn różni się między wzorcem a urządzeniem slave, a typy kolumn są niezgodne (błąd 1677).

ZMIANA STÓŁ kontaktów ZMIENIAJ adres e-mail VARCHAR (60) PO nazwa;

byłby jednym ze sposobów rozwiązania tego problemu.

Powiązane problemy