Ja, om det finns en möjlighet kan du sätta båda last, first
och first last
in i databasen är det bättre sättet att utforma ditt schema på rätt sätt.
Om du någonsin hitta dig själv när du försöker söka på, eller på annat sätt manipulera, delar av kolumner är ditt schema nästan säkert brutet. Det kommer nästan säkert att döda prestandan.
Det korrekta sättet är att ha tabellen så här:
T1 FirstName LastName
== ========= ========
1 Pax Diablo
2 Bob Smith
3 George Jones
Då kan du mer effektivt dela upp det användarinmatade namnet (en gång, innan du kör frågan) istället för att försöka dela upp varje enskilt namn i databasen.
I fallet där databasen innehåller alltid last, first
, det kanske inte är nödvändigt för en schemaändring.
Problemet du har i det fallet är helt enkelt att tolka vad användaren skrivit in.
En möjlighet, även om det är en prestationsdödare, är att göra en like
för varje separat ord. Så om användaren skrev in pax diablo
, din resulterande fråga kan vara:
select T1 from mytable
where T2 like '%pax%'
and T2 like '%diablo%'
På så sätt bryr du dig inte så mycket om beställningen.
Men med tanke på min motvilja mot långsamma frågor, skulle jag försöka undvika det om det inte är absolut nödvändigt (eller din databas är relativt liten och sannolikt kommer att förbli så).
Det finns alla möjliga sätt att snabba upp den här typen av frågor, till exempel:
- med de fulltextsökmöjligheter som ditt DBMS har.
- emulera sådana förmågor genom att extrahera och lagra ord under infogning/uppdateringsutlösare (och ta bort dem under raderingsutlösare).
- det tidigare fallet, men också att säkerställa extra kolumner som används med små bokstäver i den aktuella kolumnen (för hastighet).
- berätta för användaren att de måste använda den
last, first
formulär för sökning. - försöker undvika
%something%
söksträng så mycket som möjligt (medsomething%
, index kan fortfarande användas). - min tidigare nämnda metod för "dela upp namnet i två kolumner".