SQL query pro vyhledávání uživatelů + efektivní řešení

Lothic

Ahoj,
jakým způsobem by měl být navržen dotaz pro vyhledávání uživatelů podle username, aby si ho další uživatel mohl přidat do přátel? A řekněme, že v databázi je velké množství záznamů. Jak by měl vypadat dotaz a jak by to mělo být zpracováno, co nejúčiněji?
Řekněme, že je prostě tabulka User - id, username, password, email...

Děkuji


moje jméno je rezervované

Re:SQL query pro vyhledávání uživatelů + efektivní řešení
« Odpověď #1 kdy: 15. 12. 2018, 23:34:18 »
SELECT id FROM User WHERE username = 'hledaná hodnota'
id je primární klíč tabulky
Nad jedním selectem do takhle jednoduché tabulky nic moc nevymyslíš. Velké množství záznamů není 1000 řádků, ani 10000 řádků, ani 100000 řádků. Prostě použij to nejjednodušší co tě napadne a jeď. Tohle nebude úzké hrdlo aplikace

Kolemjdoucí

Re:SQL query pro vyhledávání uživatelů + efektivní řešení
« Odpověď #2 kdy: 16. 12. 2018, 00:25:23 »
Ahoj,
jakým způsobem by měl být navržen dotaz pro vyhledávání uživatelů podle username, aby si ho další uživatel mohl přidat do přátel? A řekněme, že v databázi je velké množství záznamů. Jak by měl vypadat dotaz a jak by to mělo být zpracováno, co nejúčiněji?
Řekněme, že je prostě tabulka User - id, username, password, email...

To tě jako na pohovoru zkouší z toho jestli víš jak v databázi fungují indexy? Sorry, ale jestli na tohle nedokážeš odpovědět sám, tak jim řekni že to balíš a jdeš se doučit základy aby ses zbytečně neztrapňoval...

moje jméno je rezervované

Re:SQL query pro vyhledávání uživatelů + efektivní řešení
« Odpověď #3 kdy: 16. 12. 2018, 08:58:57 »
Toto mě nenapadlo. Tak prosím tě hlavně to nevzdávej. K nám přišel programátor na zkoušku, měl udělat trigger a nějakou proceduru a tabulku. Prý to dělal jednou, kdysi. Nakonec to nějak splácal, za celou dobu se na nic nezeptal, ani jednou neotevřel google a po obědě řekl že je to moc těžké a že to dělat nebude. To nám spadla čelist. Nikdo na něho netlačil, nikdo nečekal, že to vysype z rukávu za 10 minut, ale borcovi se zdálo, že tlak na něj je velký

Re:SQL query pro vyhledávání uživatelů + efektivní řešení
« Odpověď #4 kdy: 16. 12. 2018, 09:37:52 »
Dotaz bude triviální, prostě bude v podmínce porovnání username a uživatelem zadané hodnoty. Akorát si musíte rozmyslet, zda uživatel bude muset zadat přesně celé username, nebo jestli povolíte hledání podle částečné shody (a potom jak přesně – zda se bude hledat od začátku nebo kdekoli v username). Dotazem efektivitu vyhledávání nijak neovlivníte. Ovlivníte ji tím, že nad tabulkou budete mít vhodný index, takže databáze bude moci vyhledat záznam podle indexu a nebude muset procházet všechny záznamy jeden po druhém. Přesný typ indexu (hash, strom, n-gramy apod.) záleží na tom, jak přesně bude dotaz vypadat.


agent

Re:SQL query pro vyhledávání uživatelů + efektivní řešení
« Odpověď #5 kdy: 17. 12. 2018, 10:31:34 »
Přijde na to, v čem má být efektivní.
Návrh z hlediska zátěže a rychlosti tu už ostatní okomentovali.
Co se týká efektivity z hlediska požadavků uživatele jsou v zásadě 3 varianty.
1/ hledám podle přesné shody jména SELECT * FROM x WHERE name = @search
2/ jsem si jistý jen částí jména a chci všechny vyhovující záznamy SELECT * FROM x WHERE name LIKE %@search% ORDER BY xyz (omlouvám se za nejspíš nekorektní syntaxi :-) )
3/ nejsem si moc jistý ničím, jméno jen odhaduju a chci co nejvíc relevantní výsledky - použiju nějaký fulltext search.

Urvustrop

Re:SQL query pro vyhledávání uživatelů + efektivní řešení
« Odpověď #6 kdy: 17. 12. 2018, 13:22:25 »
agent: Na syntax sere pes, ale za tu * bych tě jebnul  ;D