Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Obvykle dotaz nezobrazuje všetky stĺpce v tabuľke alebo tabuľky sa odkazuje . Zamestnávateľ môže , napríklad , mať tabuľku , ktorá sleduje zamestnancov absencia . Ak chce zistiť , ktorí zamestnanci mali aspoň jednu absenciu v poslednom mesiaci , môže sa použiť dotaz , ktorý vyzerá podobne ako toto :
SELECT employees.first_name , zamestnanci employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date > = ' Jun - 01 - 09 ' ,
Bob Smith bol prítomný na tri dni v júni , budú výsledky dotazu obsahuje tri riadky Bob Smith . Aj keď dotaz nezobrazuje dátum , pretože Bob je tri absencia boli v rôznych termínoch , vráti tento dotaz každom z troch riadkov .
Prečo duplicitné výsledky sú zlé
Duplicitné riadky , aby váš výstup ťažké čítať nielen, ale aj spomaliť váš dotaz a prasa databázových zdrojov . Ak nie je vaša databáza je veľmi malé , pravdepodobne vytvoriť SQL skripty v prípade vývoj databázy , ktorá je oddelená od výroby inštancie . To nie je vôbec neobvyklé prípady rozvoja , ktoré majú ďaleko menej dát v nich , ako napríklad výroby .
Ak chcete povoliť duplicitné riadky vo vašom výstupe , robíš vyhľadávanie databázy celá cesta cez všetky stoly ste sa spojili v dotaze . To môže urobiť dotaz , ktorý bežal dosť rýchlo , v dev napríklad pomalé na prechádzanie vo výrobe . Ak váš produkcia databázy je veľký , váš dotaz môže bežať niekoľko hodín
Použitie a optimalizácia DISTINCT
nasledujúce SELECT vráti jeden riadok pre Bob Smith : .
SELECT DISTINCT employees.first_name , zamestnanci employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date MEDZI '2009 - 06 - 01 ' a '2009 - 07 - 01 ;
vaše výsledky sú ľahšie čítať , ale váš databázový server musí ešte pracovať príliš ťažké , ak váš stôl zamestnanec má oveľa viac riadkov , ako vašej absencia tabuľky . MySQL bude prejsť každý záznam v tabuľke zamestnancov a uvidíte , či zamestnanec má nejaké voľno
Miesto , aby DISTINCT pracovať pre vás , aby váš dotaz efektívnejší : .
SELECT DISTINCT employees.first_name zamestnanci employees.last_nameFROM , absencesWHERE absences.employee_id = employees.employee_idAND absences.date > = ' Jun - 01 - 09 ' ,
Tento dotaz bude záznam v tabuľke absencií a prestať hľadať tabuľku zamestnancov akonáhle zistí , že zamestnanec , ktorý ide s touto neprítomnosti . Vaša otázka bude prebiehať iba toľko hľadá , ako tam sú absencia a bude prehľadávať oveľa menej tabuľky zamestnancov na každom hľadanie . Využíva menej databázové zdroje a beží oveľa rýchlejšie .