$lang['tuto'] = "ઉપશામકો"; ?> SQL સર્વર

SQL સર્વર સેલ્ફ-જોઇન્સમાં સ્વ-જોડી પંક્તિઓને બાદ કરતાં

Temp mail SuperHeros
SQL સર્વર સેલ્ફ-જોઇન્સમાં સ્વ-જોડી પંક્તિઓને બાદ કરતાં
SQL સર્વર સેલ્ફ-જોઇન્સમાં સ્વ-જોડી પંક્તિઓને બાદ કરતાં

એસક્યુએલ સર્વરમાં સ્વ-જોડાણ અને અનન્ય જોડી પડકારોને સમજવું

એસક્યુએલ સેલ્ફ-જોઇન્સ એ સમાન ટેબલની અંદર પંક્તિઓની જોડી બનાવવા માટે એક આકર્ષક અને શક્તિશાળી તકનીક છે. ભલે તમે ડેટા સંબંધોનું પૃથ્થકરણ કરી રહ્યાં હોવ અથવા કાર્ટેશિયન પ્રોડક્ટ બનાવી રહ્યાં હોવ, સ્વ-જોડાવું અસંખ્ય શક્યતાઓ ખોલે છે. જો કે, તેઓ ચોક્કસ પડકારો પણ રજૂ કરે છે, જેમ કે સ્વ-જોડી પંક્તિઓ ટાળવી.

કલ્પના કરો કે તમારી પાસે બહુવિધ પંક્તિઓ સાથેનું ટેબલ છે, જેમાંથી કેટલાક કૉલમમાં સમાન મૂલ્યો શેર કરે છે. પોતાની સાથે કાર્ટેશિયન ઉત્પાદનનું પ્રદર્શન ઘણીવાર ડુપ્લિકેટ જોડીમાં પરિણમે છે, જેમાં પોતાની સાથે જોડી પંક્તિઓનો સમાવેશ થાય છે. આ આવા કિસ્સાઓને બાકાત રાખવા માટે કાર્યક્ષમ SQL તર્કની જરૂરિયાત બનાવે છે, અર્થપૂર્ણ સંબંધોનું વિશ્લેષણ કરવામાં આવે તેની ખાતરી કરે છે.

ઉદાહરણ તરીકે, 4, 4 અને 5 જેવા મૂલ્યો ધરાવતા કોષ્ટકને ધ્યાનમાં લો. વધારાની શરતો વિના, એક સરળ સ્વ-જોડાણ ભૂલથી પોતાની સાથે મૂલ્ય 4 ધરાવતી પંક્તિને જોડી શકે છે. બિન-યુનિક ઓળખકર્તાઓ સાથે કામ કરતી વખતે આ સમસ્યા ખાસ કરીને સમસ્યારૂપ બની શકે છે, જ્યાં સમાન પંક્તિઓ વચ્ચેનો તફાવત નિર્ણાયક બની જાય છે.

આ લેખમાં, અમે T-SQL નો ઉપયોગ કરીને આ પરિસ્થિતિને હેન્ડલ કરવા માટે વ્યવહારુ અભિગમોની શોધ કરીશું. તમે ડુપ્લિકેટ મૂલ્યો સાથે કામ કરતી વખતે પણ, બધી માન્ય જોડી જાળવી રાખતી વખતે સ્વ-જોડી પંક્તિઓને કેવી રીતે બાકાત રાખવી તે શીખી શકશો. ચાલો SQL તકનીકો અને ઉદાહરણોમાં ડાઇવ કરીએ જે તેને શક્ય બનાવે છે! 🎯

આદેશ ઉપયોગનું ઉદાહરણ
ROW_NUMBER() ડેટાસેટના પાર્ટીશનની અંદર પંક્તિઓ માટે અનન્ય અનુક્રમિક પૂર્ણાંક અસાઇન કરે છે. જોડી બનાવવાના હેતુઓ માટે કૉલમમાં સમાન મૂલ્યોને અલગ પાડવા માટે અહીં વપરાય છે. ઉદાહરણ: ROW_NUMBER() ઓવર (x ક્રમ દ્વારા પાર્ટીશન (નલ પસંદ કરો)).
CROSS APPLY ડાબી કોષ્ટકમાંથી દરેક પંક્તિને સબક્વેરી અથવા વ્યુત્પન્ન કોષ્ટકમાંથી મેળ ખાતી પંક્તિઓ સાથે જોડે છે. કાર્યક્ષમ જોડી જનરેશન માટે અહીં વપરાય છે. ઉદાહરણ: #a a1 ક્રોસ અરજીમાંથી a1.x, a2.x પસંદ કરો (#a a2 માંથી x પસંદ કરો જ્યાં a1.x != a2.x) a2.
WITH (CTE) ક્વેરી અંદર અસ્થાયી ડેટા મેનીપ્યુલેશન માટે સામાન્ય કોષ્ટક અભિવ્યક્તિ વ્યાખ્યાયિત કરે છે. પંક્તિ નંબરો સોંપીને સ્વ-જોડાણને સરળ બનાવવા માટે અહીં વપરાય છે. ઉદાહરણ: RowCTE AS સાથે (સિલેક્ટ x, ROW_NUMBER() ઓવર (...) માંથી #a).
PARTITION BY વિન્ડો ફંક્શન લાગુ કરતાં પહેલાં ડેટાને પાર્ટીશનોમાં વિભાજીત કરે છે. અહીં, તે કોલમમાં દરેક અનન્ય મૂલ્ય માટે પંક્તિ નંબરિંગ રીસેટની ખાતરી કરે છે x. ઉદાહરણ: ROW_NUMBER() ઓવર (x દ્વારા પાર્ટીશન ...).
ON બે કોષ્ટકો વચ્ચે જોડાવાની સ્થિતિનો ઉલ્લેખ કરે છે. પોતાની સાથે જોડી પંક્તિઓને બાકાત રાખવા માટે અહીં વપરાય છે. ઉદાહરણ: ON a1.x != a2.x.
DROP TABLE IF EXISTS તકરારને ટાળીને, નવું બનાવતા પહેલા ટેબલ દૂર કરવામાં આવે તેની ખાતરી કરે છે. ઉદાહરણ: ડ્રોપ ટેબલ જો અસ્તિત્વમાં હોય તો #a.
DELETE ઉલ્લેખિત શરતોના આધારે કોષ્ટકમાંથી પંક્તિઓ દૂર કરે છે. નવી કિંમતો દાખલ કરતા પહેલા ડેટા રીસેટ કરવા માટે અહીં વપરાય છે. ઉદાહરણ: #a માંથી કાઢી નાખો.
INSERT INTO ... VALUES કોષ્ટકમાં પંક્તિઓ ઉમેરે છે. વિશ્લેષણ માટે વિશિષ્ટ પરીક્ષણ મૂલ્યો સાથે કોષ્ટક બનાવવા માટે અહીં વપરાય છે. ઉદાહરણ: #a મૂલ્યો (4), (4), (5) માં દાખલ કરો.
SELECT ... JOIN શરતના આધારે બે કોષ્ટકોમાંથી પંક્તિઓને જોડીને ડેટા પુનઃપ્રાપ્ત કરે છે. અહીં, તે કાર્ટેશિયન ઉત્પાદન બનાવે છે અને ફિલ્ટર્સ લાગુ કરે છે. ઉદાહરણ: પસંદ કરો * માંથી #a a1 જોડાઓ #a a2 પર a1.x != a2.x.

એસક્યુએલ સર્વરમાં સ્વ-જોડાવાની ગતિશીલતાને સમજવી

સમાન કોષ્ટકમાં ડેટા સાથે કામ કરતી વખતે SQL સર્વરમાં સ્વ-જોડાવું એ એક શક્તિશાળી સાધન છે. કાર્ટેશિયન પ્રોડક્ટ બનાવીને, તમે દરેક પંક્તિને દરેક અન્ય પંક્તિ સાથે જોડી શકો છો, જે ચોક્કસ પ્રકારના રિલેશનલ વિશ્લેષણ માટે જરૂરી છે. પડકાર ત્યારે આવે છે જ્યારે તમારે પોતાની સાથે જોડાયેલી પંક્તિઓને બાકાત રાખવાની જરૂર હોય. આને ચોક્કસ જોડાવા માટેની શરતોની જરૂર છે, જેમ કે ઉપયોગ ON a1.x != a2.x, માત્ર અર્થપૂર્ણ જોડીઓ શામેલ છે તેની ખાતરી કરવા માટે. પ્રદાન કરેલ સ્ક્રિપ્ટ્સમાં, અમે આ પ્રક્રિયાને અસરકારક રીતે કેવી રીતે સેટ અને રિફાઇન કરવી તે દર્શાવ્યું છે.

બિન-યુનિક મૂલ્યો ધરાવતા કોષ્ટકો માટે, જેમ કે "4" ના ડુપ્લિકેટ, સીધા ફિલ્ટર્સનો ઉપયોગ કરવો પૂરતો નથી. આને હેન્ડલ કરવા માટે, અમે જેમ કે તકનીકો રજૂ કરી ROW_NUMBER() કોમન ટેબલ એક્સપ્રેશન (CTE) ની અંદર. આ અભિગમ પાર્ટીશનમાં દરેક પંક્તિ માટે એક અનન્ય નંબર અસાઇન કરે છે, ડુપ્લિકેટને અલગ પાડે છે અને ચોક્કસ જોડી તર્ક માટે પરવાનગી આપે છે. આ પદ્ધતિ સુનિશ્ચિત કરે છે કે પરિણામોમાં અસ્પષ્ટતાને ટાળીને દરેક "4" ને અલગ રીતે ગણવામાં આવે છે. દાખલા તરીકે, (4, 5) બે વાર જોડી પરંતુ (4, 4) જેવા સ્વ-જોડીઓને બાદ કરતાં વધુ સ્વચ્છ, વધુ વિશ્વસનીય આઉટપુટ પ્રદાન કરે છે. 🚀

બીજી ટેકનિકનો ઉપયોગ કરવામાં આવ્યો હતો ક્રોસ એપ્લાય કરો. પેરિંગ માટે ડેટાના ફિલ્ટર કરેલ સબસેટ્સ બનાવતી વખતે આ ખાસ કરીને કાર્યક્ષમ છે. CROSS APPLY એ અદ્યતન જોડાવા જેવું કામ કરે છે, જે ટેબલને સબક્વેરી સાથે ગતિશીલ રીતે ક્રિયાપ્રતિક્રિયા કરવાની મંજૂરી આપે છે. આનો ઉપયોગ કરીને, અમે એ સુનિશ્ચિત કરી શકીએ છીએ કે પંક્તિઓ જોડાય તે પહેલાં ચોક્કસ શરતો પૂરી કરે છે, નોંધપાત્ર રીતે પ્રદર્શન અને સ્પષ્ટતામાં સુધારો કરે છે. ઉદાહરણ તરીકે, મોટા ડેટાસેટ્સ સાથે કામ કરતી વખતે આ આદર્શ છે જ્યાં માપનીયતા જાળવવી મહત્વપૂર્ણ છે. આવી પદ્ધતિઓનો ઉપયોગ કરવો એ જટિલ પરિસ્થિતિઓને સંભાળવામાં SQL સર્વરની લવચીકતાને પ્રકાશિત કરે છે.

છેલ્લે, સ્ક્રિપ્ટોએ મોડ્યુલર અને ટેસ્ટેબલ કોડનું મહત્વ પણ દર્શાવ્યું. દરેક ક્વેરી પુનઃઉપયોગી અને સમજવામાં સરળ હોય તેવા આદેશો સાથે ડિઝાઇન કરવામાં આવી હતી જો અસ્તિત્વમાં હોય તો ટેબલ છોડો પરીક્ષણો વચ્ચે સ્વચ્છ રીસેટની ખાતરી કરવી. આ માળખું ડિબગીંગ અને દૃશ્ય-આધારિત પરીક્ષણને સમર્થન આપે છે, જે વાસ્તવિક-વિશ્વ એપ્લિકેશનો માટે મહત્વપૂર્ણ છે. તમે ગ્રાહકના વર્તનનું પૃથ્થકરણ કરી રહ્યાં હોવ અથવા નેટવર્ક ડેટા પેર જનરેટ કરી રહ્યાં હોવ, આ તકનીકોને કાર્યક્ષમ અને ચોક્કસ પરિણામો પ્રાપ્ત કરવા માટે લાગુ કરી શકાય છે. એસક્યુએલ આદેશો અને પદ્ધતિઓના યોગ્ય ઉપયોગ સાથે, જટિલ સંબંધોનું સંચાલન માત્ર શક્ય જ નહીં પણ કાર્યક્ષમ પણ બને છે! 🌟

એસક્યુએલ સર્વરમાં સ્વ-જોડાણને સંભાળવું: સ્વ-જોડી પંક્તિઓને બાદ કરતાં

આ સોલ્યુશન એસક્યુએલ સર્વર પર ધ્યાન કેન્દ્રિત કરે છે, પોતાની સાથે જોડી પંક્તિઓને બાકાત રાખીને સ્વ-જોડાણને હેન્ડલ કરવા માટે મોડ્યુલર અને ફરીથી વાપરી શકાય તેવો અભિગમ પ્રદાન કરે છે.

-- Drop table if it exists
DROP TABLE IF EXISTS #a;
-- Create table #a
CREATE TABLE #a (x INT);
-- Insert initial values
INSERT INTO #a VALUES (1), (2), (3);
-- Perform a Cartesian product with an always-true join
SELECT * FROM #a a1
JOIN #a a2 ON 0 = 0;
-- Add a condition to exclude self-pairing rows
SELECT * FROM #a a1
JOIN #a a2 ON a1.x != a2.x;
-- Insert non-unique values for demonstration
DELETE FROM #a;
INSERT INTO #a VALUES (4), (4), (5);
-- Retrieve all pairs excluding self-pairing
SELECT * FROM #a a1
JOIN #a a2 ON a1.x != a2.x;

ડુપ્લિકેટ મૂલ્યોને અલગ પાડવા માટે ROW_NUMBER નો ઉપયોગ કરવો

આ સોલ્યુશન સ્વ-જોડાતા પહેલા ડુપ્લિકેટ પંક્તિઓ માટે અનન્ય ઓળખકર્તાઓ સોંપવા માટે ROW_NUMBER સાથે CTE રજૂ કરે છે.

-- Use a Common Table Expression (CTE) to assign unique identifiers
WITH RowCTE AS (
    SELECT x, ROW_NUMBER() OVER (PARTITION BY x ORDER BY (SELECT )) AS RowNum
    FROM #a
)
-- Perform self-join on CTE with condition to exclude self-pairing
SELECT a1.x AS Row1, a2.x AS Row2
FROM RowCTE a1
JOIN RowCTE a2
ON a1.RowNum != a2.RowNum;

ક્રોસ એપ્લાયનો ઉપયોગ કરીને ઓપ્ટિમાઇઝ સોલ્યુશન

આ સોલ્યુશન કાર્યક્ષમ જોડી જનરેશન માટે CROSS APPLY નો ઉપયોગ કરે છે, તેની ખાતરી કરીને કે કોઈ પંક્તિ પોતાની સાથે જોડાયેલી નથી.

-- Use CROSS APPLY for an optimized pair generation
SELECT a1.x AS Row1, a2.x AS Row2
FROM #a a1
CROSS APPLY (
    SELECT x
    FROM #a a2
    WHERE a1.x != a2.x
) a2;

સોલ્યુશન્સનું પરીક્ષણ કરતું એકમ

આ સ્ક્રિપ્ટ વિવિધ દૃશ્યોમાં દરેક અભિગમની શુદ્ધતાને માન્ય કરવા માટે એકમ પરીક્ષણો પ્રદાન કરે છે.

-- Test case: Check Cartesian product output
SELECT COUNT(*) AS Test1Result
FROM #a a1
JOIN #a a2 ON 0 = 0;
-- Test case: Check output excluding self-pairing
SELECT COUNT(*) AS Test2Result
FROM #a a1
JOIN #a a2 ON a1.x != a2.x;
-- Test case: Validate output with duplicate values
WITH RowCTE AS (
    SELECT x, ROW_NUMBER() OVER (PARTITION BY x ORDER BY (SELECT )) AS RowNum
    FROM #a
)
SELECT COUNT(*) AS Test3Result
FROM RowCTE a1
JOIN RowCTE a2 ON a1.RowNum != a2.RowNum;

એસક્યુએલ સર્વરમાં સ્વ-જોડાણને સંભાળવા માટેની અદ્યતન તકનીકો

SQL સર્વરમાં સ્વ-જોડાણ સાથે કામ કરતી વખતે, જ્યારે કોષ્ટકમાં પંક્તિઓ ડુપ્લિકેટ મૂલ્યો શેર કરે છે ત્યારે સંબંધોનું સંચાલન વધુ જટિલ બની જાય છે. ઓછી જાણીતી પરંતુ અત્યંત અસરકારક અભિગમ એ વિન્ડો ફંક્શનનો ઉપયોગ છે DENSE_RANK() તેમની જૂથની અખંડિતતા જાળવી રાખીને ડુપ્લિકેટ મૂલ્યોને સુસંગત ઓળખકર્તાઓને સોંપવા માટે. આ ખાસ કરીને એવા સંજોગોમાં ઉપયોગી છે કે જ્યાં અદ્યતન વિશ્લેષણ માટે પંક્તિઓ જોડતા પહેલા ડેટાને જૂથબદ્ધ કરવું જરૂરી છે.

અન્વેષણ કરવા માટે અન્ય શક્તિશાળી સુવિધાનો ઉપયોગ છે સિવાય, જે એક પરિણામ સમૂહને બીજામાંથી બાદ કરી શકે છે. દાખલા તરીકે, કાર્ટેશિયન ઉત્પાદનનો ઉપયોગ કરીને તમામ સંભવિત જોડીઓ બનાવ્યા પછી, તમે અનિચ્છનીય સ્વ-જોડી દૂર કરવા સિવાયનો ઉપયોગ કરી શકો છો. આ ખાતરી કરે છે કે તમે પંક્તિઓને મેન્યુઅલી ફિલ્ટર કર્યા વિના માત્ર અર્થપૂર્ણ સંબંધો જાળવી રાખો. EXCEPT પદ્ધતિ સ્વચ્છ, માપી શકાય તેવી અને ખાસ કરીને વધુ જટિલ ડેટાસેટ્સ માટે ઉપયોગી છે, જ્યાં મેન્યુઅલી કોડિંગની સ્થિતિ ભૂલથી સંભવ બની શકે છે.

છેલ્લે, ઇન્ડેક્સીંગ વ્યૂહરચનાઓ સ્વ-જોડાવાના પ્રદર્શનમાં નોંધપાત્ર સુધારો કરી શકે છે. વારંવાર વપરાતી કૉલમ્સ પર અનુક્રમણિકાઓ બનાવીને, જેમ કે જોડાવાની સ્થિતિમાં સામેલ છે, ક્વેરી એક્ઝેક્યુશનનો સમય ભારે ઘટાડી શકાય છે. ઉદાહરણ તરીકે, કૉલમ પર ક્લસ્ટર્ડ ઇન્ડેક્સ બનાવવું x સુનિશ્ચિત કરે છે કે ડેટાબેઝ એન્જિન કાર્યક્ષમ રીતે જોડીને પુનઃપ્રાપ્ત કરે છે. આને પરફોર્મન્સ મોનિટરિંગ ટૂલ્સ સાથે જોડવાથી તમે પ્રોડક્શન વાતાવરણમાં શ્રેષ્ઠ રનટાઇમ સુનિશ્ચિત કરીને ક્વેરીઝને ફાઇન-ટ્યુન કરી શકો છો. 🚀

SQL સર્વર સેલ્ફ-જોઇન્સ પરના મુખ્ય પ્રશ્નો

  1. SQL સર્વરમાં સ્વ-જોડાવાનો મુખ્ય ઉપયોગ શું છે?
  2. સ્વ-જોડાણોનો ઉપયોગ સમાન કોષ્ટકની અંદર પંક્તિઓની તુલના કરવા માટે થાય છે, જેમ કે સંબંધો શોધવા, સંયોજનો જનરેટ કરવા અથવા વંશવેલો માળખાનું વિશ્લેષણ કરવા.
  3. સ્વ-જોડાણમાં ડુપ્લિકેટ પંક્તિઓ કેવી રીતે અસરકારક રીતે નિયંત્રિત કરી શકાય?
  4. તમે ઉપયોગ કરી શકો છો ROW_NUMBER() અથવા DENSE_RANK() એ અંદર WITH CTE એ ડુપ્લિકેટ પંક્તિઓને અનન્ય રીતે ઓળખવા માટે, ચોક્કસ પેરિંગ તર્કને મંજૂરી આપીને.
  5. સ્વ-જોડાણમાં CROSS APPLY નો ઉપયોગ કરવાનો શું ફાયદો છે?
  6. CROSS APPLY જોડાવા માટે ગતિશીલ ફિલ્ટરિંગની મંજૂરી આપે છે, જોડાવાને અમલમાં મૂકતા પહેલા સંબંધિત સબસેટ્સ પસંદ કરીને ક્વેરીઝને ઑપ્ટિમાઇઝ કરી શકે છે.
  7. શું સ્વ-જોડાણ મોટા ડેટાસેટ્સને અસરકારક રીતે હેન્ડલ કરી શકે છે?
  8. હા, જેવા આદેશોનો ઉપયોગ કરીને યોગ્ય અનુક્રમણિકા અને ઑપ્ટિમાઇઝ ક્વેરીઝ સાથે EXCEPT અથવા PARTITION BY, સ્વ-જોડાવું અસરકારક રીતે મોટા ડેટાસેટ્સનું સંચાલન કરી શકે છે.
  9. સ્વ-જોડાણનો ઉપયોગ કરતી વખતે શું સાવચેતી રાખવી જોઈએ?
  10. જેવી શરતોમાં જોડાવાની ખાતરી કરો ON a1.x != a2.x અનંત લૂપ્સ અથવા ખોટા કાર્ટેશિયન ઉત્પાદનોને ટાળવા માટે સારી રીતે વ્યાખ્યાયિત કરવામાં આવે છે.

ડેટા ઇન્ટિગ્રિટી માટે સેલ્ફ-જોઇન્સ રિફાઇનિંગ

સ્વ-જોડાવું એ બહુમુખી SQL સર્વર સુવિધા છે, જે અદ્યતન ડેટા સંબંધો માટે પંક્તિ જોડીને સક્ષમ કરે છે. ડુપ્લિકેટ્સનું સંચાલન અને સ્વ-જોડી પંક્તિઓને બાકાત રાખવાથી અર્થપૂર્ણ આઉટપુટની ખાતરી થઈ શકે છે. જેવી તકનીકો સિવાય અને અનુક્રમણિકા વ્યૂહરચના આ પ્રશ્નોને વાસ્તવિક દુનિયાના ઉપયોગના કેસ માટે વધુ કાર્યક્ષમ અને વ્યવહારુ બનાવે છે. 🎯

જેવા સાધનોનો લાભ લઈને CTEs અને દ્વારા પાર્ટીશન, વિકાસકર્તાઓ ચોક્કસ, મોડ્યુલર અને ફરીથી વાપરી શકાય તેવી SQL સ્ક્રિપ્ટની ખાતરી કરી શકે છે. આ અભિગમ માત્ર બિન-અનોખા મૂલ્યોને હેન્ડલ કરવાનું સરળ બનાવતું નથી પણ કામગીરીમાં પણ સુધારો કરે છે. જટિલ ડેટાસેટ્સ અને રિલેશનલ ઓપરેશન્સનું સંચાલન કરતા વ્યાવસાયિકો માટે આ વ્યૂહરચનાઓમાં નિપુણતા મેળવવી મહત્વપૂર્ણ છે.

SQL સર્વર સેલ્ફ-જોઇન્સ માટે સંદર્ભો અને સંસાધનો
  1. SQL સર્વર જોડાવા અને તકનીકો પર વ્યાપક માર્ગદર્શિકા: માઈક્રોસોફ્ટ એસક્યુએલ દસ્તાવેજીકરણ
  2. એસક્યુએલ સર્વર સાથે ડુપ્લિકેટ્સ હેન્ડલ કરવામાં અદ્યતન ખ્યાલો: SQL ઝુંપડી - ROW_NUMBER વિહંગાવલોકન
  3. મોટા ડેટાસેટ્સ માટે સ્વ-જોડાણને ઑપ્ટિમાઇઝ કરવું: સિમ્પલ ટૉક - ઑપ્ટિમાઇઝ એસક્યુએલ જોઇન
  4. SQL સર્વર ક્વેરીઝમાં ક્રોસ એપ્લાય અને સિવાયનો ઉપયોગ કરવો: SQL સર્વર સેન્ટ્રલ - એપ્લાય ઓપરેટર્સ
  5. SQL સર્વરમાં અનુક્રમણિકા માટે શ્રેષ્ઠ પ્રયાસો: SQLSkills - ક્લસ્ટર્ડ ઇન્ડેક્સ શ્રેષ્ઠ વ્યવહારો