Այո, քանի որ DISTINCT-ի օգտագործումը (երբեմն ըստ մեկնաբանության) կհանգեցնի արդյունքների պատվիրմանը Հարյուրավոր գրառումների տեսակավորումը ժամանակ է պահանջում: Փորձեք GROUP BY ձեր բոլոր սյունակներով, երբեմն դա կարող է հանգեցնել հարցումների օպտիմիզատորին ընտրել ավելի արդյունավետ ալգորիթմ (գոնե Oracle-ի դեպքում ես նկատեցի կատարողականի զգալի ձեռքբերում):
Վատ է օգտագործել տարբերվող:
Դե, «տարբերակի» ոչ պատշաճ օգտագործումը ոչ միայն թաքցնում է իրական խնդիրը (աղյուսակների կրկնօրինակ գրառումները, պայմանի բացակայությունը վերևում) ինչպես քննարկվել է վերևում, այլև նվազեցնում է հարցումների կատարումը… Սա կբերի, որ հարցման IO արժեքը (տրամաբանական ընթերցումներ) զգալիորեն կբարձրանա:
Արդյո՞ք տարբերակումը դանդաղեցնում է հարցումը:
Շատ քիչ հարցումներ կարող են ավելի արագ գործել SELECT DISTINCT ռեժիմում, իսկ շատ քչերն ավելի դանդաղ կաշխատեն (բայց ոչ զգալիորեն դանդաղ) SELECT DISTINCT ռեժիմում, բայց ավելի ուշ դեպքում դա հավանական է: որ հայտը կարող է կարիք ունենալ ուսումնասիրելու կրկնօրինակ դեպքերը, ինչը կատարում է և բարդության բեռը տեղափոխում հավելվածի վրա։
Ավելի լավ է օգտագործել տարբեր թե՞ GROUP BY:
MySQL-ում DISTINCT-ը մի փոքր ավելի արագ է թվում, քան GROUP BY, եթե դաշտը ինդեքսավորված չէ: DISTINCT-ը վերացնում է միայն կրկնօրինակ տողերը, բայց GROUP BY-ը, կարծես, դրանք լրացուցիչ տեսակավորում է:
Ինչու մենք չպետք է օգտագործենք տարբեր SQL-ում:
Եթե ընտրված տարբերակն առկա է խնդիրը «շտկելու» համար, ապա հավանական է, որ դրա դիմաց վատ կատարողականություն ստանաք: GROUP BY-ը թույլ է տալիս օգտագործել ագրեգատ գործառույթներ, ինչպիսիք են AVG, MAX, MIN, SUM և COUNT: DISTINCT ուղղակի հեռացնում է կրկնօրինակները.