SQL Vaicājums

Kā MS SQLā vienai tabulai piedžoinot apakšvaicājumu (atlasīt ierakstus no otrās tabulas), kurš atgriež nevis kādu no agregātfunkcijām (piemēram: min, max), bet gan pirmo ierakstu, kad apakšvaicājums ir sakārtots pēc kāda lauka? Apakšvaicājumu likt blakus pamattabulas atlasāmajiem laukiem neder, citādi uz katra pamatvaicājuma atlasītās rindas būs savs apakšvaicājums, rezultātā smags i/o operāciju apjoms, nemaz nerunājot par izpildes laiku, kad pamatvaicājums atlasa pāris simtus tūkstošus rindiņas :)

wolands (2010-09-23 12:23)      Nu gan izvēle uzdot dzili tehnikus jautājumus šeit. :O MS SQL nelietoju, bet uz visiem šiem jautājumiem taču ir google:
http://www.select-sql.com/mssql/how-to-make-limit-from-to-in-mssql-2005.html
Kā MS SQL aptimizē pieprasījumus nezinu - parastio var iedot kādus optimizatora hintus par joiniem, bet kā to dara MS SQL nāksies meklēt tehniskajā dokumentācijā. Standarta SQL neko tādu negarantē. Var gadīties, ka storēta procedūra būs efektīgāka, kā viens queris, bet nu tas nui gan no paša SQL optimizatora ir stipri atkarīgs.

Lakstu_puve (2010-09-23 12:33)      SELECT TOP 1

Satelits_Dzeja (2010-09-23 13:01)      Man jau šķiet, ka šajos gadījumos ir jāizmanto ADO vai DAO Recordset. Tas nav SQL, bet no MS VB rīkiem jaudīgākais un to arī visplašāk izmanto, aizstājot to pašu SQL. SQL iespējas vienkārši ir ierobežotākas un iespējams šis ir tas gadījums. Es kādreiz arī mēģināju SQL, bet tad vajadzības auga un SQL vairāk nevarēju izdomāt. VB tādā ziņā ir pateicīgs un samērā saprotams un netā ir ļoti daudz jau gatavi piemēri.

Satelits_Dzeja (2010-09-23 13:03)      Tīri personiski arī pārskatāmība Recordsetiem ir labāka un nav tur tie ntie where un selecti, lai gan operācija it kā pēc būtības ir vienkārša.

wolands (2010-09-23 14:10)      Ja MS SQL ir labs optimizators, tad WHERE EXISTS ( subquery ) tiks nooptimizēts, lai lasītu tikai indeksu (ja salīdzināmie lauki, protams ir indeksēti). Bet inner join vienmēr būs ātrāki - varbūt savu pieprasījumu vari pārrakstīt kā inner join?
Ja nē, tad storēta procedūra būs nākamā ātrākā (uzmanīgi rakstot querus). Cursori klienta programmā noteikti būs lēnāki (katrs jauns pieprasījums jāsūta uz serveri utt).

Līdzīgi jautājumi
Uzdot jautājumu
Kontakti: info@jautajums.lv | Lietošanas noteikumi
jautajums.lv sadarbojas ar iepazīšanās portālu oHo.lv.
© 2010
Lietojam sīkfailus, lai personalizētu saturu un reklāmas. Sapratu