Nee, MySQL kan niet een unique "constraint" afdwingen zonder een bijbehorende index. En die index is dan (natuurlijk) alleen mogelijk op de volledige lengte, anders zou je alsnog niet kunnen bepalen of waarden uniek zijn.
Als je per se een soort-van unique constraint wilt met een index van beperkte lengte, zal je op mysql 5.1 moeten wachten voor (before insert) triggers en/of het voorlopig in je applicatie-laag moeten regelen.
Varienaja schreef op dinsdag 04 april 2006 @ 21:49:
Ik heb in Postgres wel meegemaakt dat een primary key een hash was. Sorteren op de PK (of de max oprvagen) was daarmee nog niet erg vlot te noemen. Prikken op PK ging natuurlijk wel heel vlot. Pas nadat ik een echte index maakte op de PK kon ik ook fatsoenlijk sorteren en de max vlot ophalen.
De hash-index in Postgres is absoluut niet de standaard en ik meen zelfs reeds afgeschaft als mogelijkheid. Sorteren erop is per definitie onmogelijk, de hash hoeft helemaal niet dezelfde sortering als de originele waarde te hebben. Alleen equi-look-ups gingen er (iets) sneller mee dan de standaard B+-trees die PostgreSQL standaard gebruikt.
PostgreSQL gebruikt dus net als MySQL standaard B+-trees voor indexen en die sorteren prima voor- en achteruit.
Niet gezegd dat mySQL dat precies zo doet natuurlijk!
MySQL kent sowieso maar een indextype, dus die kan het niet eens zo doen.
5 dagen voor 900MB/56M kleine records indexeren? Dat is wel heel erg lang, of is het niet zo'n snelle server?
Wat is "wel snel" ? Het is natuurlijk tamelijk logisch dat je significant meer tree-operaties nodig hebt met je volledige lengte index dan met je verkorte lengte index. Dat kunnen vrij dure operaties zijn, maar om er dan gelijk maar meerdere factoren langer over te doen?
Waar is je doos mee bezig? Vooral i/o? Vooral cpu?
Je doet toch niet ook ondertussen operaties op die tabel he?
binary is een 8bits-formaat dus 8^16 en daar passen er wel een paar miljoen in.
offtopic:
Kun je de boel niet truncaten en opnieuw vullen?

(Misschien overdreven.

)
Sja... dat is dan ook precies de manier hoe MySQL uberhaupt alle tabel-wijzigingen doet... dus je voorstel is tamelijk onzinnig