यह प्रश्न question से चलता है, मैंने कल पूछा कि मेरी संस्थाओं पर शामिल क्वेरी का उपयोग क्यों करें, जो जटिल रूप से जटिल SQL उत्पन्न करता है। ऐसा लग रहा था कि इस तरह की एक पूछताछ:लिंक में शामिल होने और "ओल्ड स्टाइल" प्री एएनएसआई सिंटैक्स में शामिल होने के बीच क्या अंतर है?
var query = from ev in genesisContext.Events
join pe in genesisContext.People_Event_Link
on ev equals pe.Event
where pe.P_ID == key
select ev;
भयानक एसक्यूएल कि डेटाबेस पर चलाने के लिए 18 सेकंड लगे उत्पादित, (एक तरह से पूर्व एएनएसआई SQL सिंटैक्स) की तरह एक जहां खंड के माध्यम से संस्थाओं में शामिल होने जबकि कम ले लिया चलाने के लिए और एक ही परिणाम
var query = from pe in genesisContext.People_Event_Link
from ev in genesisContext.Events
where pe.P_ID == key && pe.Event == ev
select ev;
मैं सब कुछ खत्म हो googled है, लेकिन अभी भी समझ में नहीं आता क्यों दूसरा पहले करने के लिए विभिन्न एसक्यूएल का उत्पादन होता है का उत्पादन करने के लिए एक दूसरे से। क्या कोई मुझे अंतर बता सकता है? मैं कीवर्ड में शामिल होने का उपयोग करना चाहिए जब
यह एसक्यूएल कि उत्पादन किया गया था जब मैं इस्तेमाल किया अपनी क्वेरी में शामिल हों और चलाने के लिए 18 सेकंड लगे है:
SELECT
1 AS [C1],
[Extent1].[E_ID] AS [E_ID],
[Extent1].[E_START_DATE] AS [E_START_DATE],
[Extent1].[E_END_DATE] AS [E_END_DATE],
[Extent1].[E_COMMENTS] AS [E_COMMENTS],
[Extent1].[E_DATE_ADDED] AS [E_DATE_ADDED],
[Extent1].[E_RECORDED_BY] AS [E_RECORDED_BY],
[Extent1].[E_DATE_UPDATED] AS [E_DATE_UPDATED],
[Extent1].[E_UPDATED_BY] AS [E_UPDATED_BY],
[Extent1].[ET_ID] AS [ET_ID],
[Extent1].[L_ID] AS [L_ID]
FROM [dbo].[Events] AS [Extent1]
INNER JOIN [dbo].[People_Event_Link] AS [Extent2] ON EXISTS (SELECT
1 AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]
LEFT OUTER JOIN (SELECT
[Extent3].[E_ID] AS [E_ID]
FROM [dbo].[Events] AS [Extent3]
WHERE [Extent2].[E_ID] = [Extent3].[E_ID]) AS [Project1] ON 1 = 1
LEFT OUTER JOIN (SELECT
[Extent4].[E_ID] AS [E_ID]
FROM [dbo].[Events] AS [Extent4]
WHERE [Extent2].[E_ID] = [Extent4].[E_ID]) AS [Project2] ON 1 = 1
WHERE ([Extent1].[E_ID] = [Project1].[E_ID]) OR (([Extent1].[E_ID] IS NULL) AND ([Project2].[E_ID] IS NULL))
)
WHERE [Extent2].[P_ID] = 291
यह एसक्यूएल है कि एएनएसआई स्टाइल सिंटैक्स का उपयोग करके उत्पादन किया गया था (और यदि मैं खुद एसक्यूएल लिख रहा था तो मैं काफी लिखूंगा):
SELECT * FROM Events AS E INNER JOIN People_Event_Link AS PE ON E.E_ID=PE.E_ID INNER JOIN PEOPLE AS P ON P.P_ID=PE.P_ID
WHERE P.P_ID = 291
शानदार सवाल। – tomfanning
आप किस डीबी का उपयोग कर रहे हैं? एसक्यूएल कोड कैसा दिखता है? – AnthonyWJones