C#.NET-āĻ LINQ āĻĒā§āϰāĻļā§āύāϗ⧁āϞāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

В āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻ•āĻŋāϛ⧁ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ LINQ āĻĒā§āϰāĻļā§āύ.
āĻāĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āϕ⧋āĻĄ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āφāϰāĻ“ āĻ•āĻŋāϛ⧁ āĻĒāĻ¨ā§āĻĨāĻž āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋ LINQ āĻĒā§āϰāĻļā§āύ.

āĻāϟāĻž āϜāĻžāύāĻž āϝāĻžāϝāĻŧ āϞāĻŋāύāϕ⧁āχ(Language-Integrated Query) āĻāĻ•āϟāĻŋ āϤāĻĨā§āϝ āĻ‰ā§ŽāϏ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻāĻŦāĻ‚ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āĻ­āĻžāώāĻžāĨ¤

А SQL āĻĨ⧇āϕ⧇ LINQ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻŦāĻŋāĻāĻŽāĻāϏ⧇ āĻĄā§‡āϟāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāĨ¤ āĻāϟāĻŋ āĻĄā§‡āϟāĻž āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āϟ⧁āϞ, āϝ⧇āĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āĻ˜ā§‹āώāĻŖāĻžāĻŽā§‚āϞāĻ• āĻ­āĻžāώāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻļā§āύāϗ⧁āϞāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ, āϝāĻž āĻĒāϰ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻšāĻŦ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āĻĒā§āϰāĻļā§āύ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, DBMS āĻĻā§āĻŦāĻžāϰāĻž āφāĻŽāϰāĻž āĻŦā§‹āĻāĻžāϝāĻŧ āĻāĻŽāĻāϏ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ.

āϝāĻžāχāĻšā§‹āĻ•, LINQ āĻĒā§āϰāĻļā§āύ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āϞāĻŋāĻ–āĻŋāϤ āĻŦ⧇āĻļā§€ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻšāϝāĻŧ āύāĻž āĻāϏāĻ•āĻŋāωāĻāϞ āĻĒā§āϰāĻļā§āύ, āϝāĻž āĻāĻ•āϜāύ āĻ…āĻ­āĻŋāĻœā§āĻž DBA āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻž āϏāĻš āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰ⧇⧎ āĻāϏāĻ•āĻŋāωāĻāϞ āĻĒā§āϰāĻļā§āύ:

  1. āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āϏāĻ‚āϝ⧋āĻ— (JOIN) āĻāĻŦāĻ‚ āĻĢāϞāĻžāĻĢāϞ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻŋāĻ‚ (āϕ⧋āĻĨāĻžāϝāĻŧ)
  2. āϏāĻ‚āϝ⧋āĻ— āĻāĻŦāĻ‚ āĻ—ā§āϰ⧁āĻĒ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ…āύ⧇āĻ• āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻž
  3. āĻļāĻ°ā§āϤ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ…āύ⧇āĻ• āĻŦ⧈āϚāĻŋāĻ¤ā§āϰ IN āωāĻĒāϰ āωāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤Đ¸ āύāĻž, <> āϚāĻžāϞ⧁ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ
  4. āĻ…āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻŸā§‡āĻŦāĻŋāϞ, CTE, āĻŸā§‡āĻŦāĻŋāϞ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĢāϞāĻžāĻĢāϞ⧇āϰ āĻŽāĻ§ā§āϝāĻŦāĻ°ā§āϤ⧀ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚
  5. āĻŦāĻžāĻ•ā§āϝ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ (āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ OPTION) āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻāĻŦāĻ‚ āĻŸā§‡āĻŦāĻŋāϞ āχāĻ™ā§āĻ—āĻŋāϤ āϏāĻš āϏāĻ™ā§āϗ⧇ (...)
  6. āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āϏāĻŽāϝāĻŧ āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĄā§‡āϟāĻž āϰāĻŋāĻĄāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻĒāϰāĻŋāĻ¤ā§āϰāĻžāĻŖ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āĻ…āĻ¨ā§āϝāϤāĻŽ āωāĻĒāĻžāϝāĻŧ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻ­āĻŋāω āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž

āĻĢāϞ⧇ āĻĒā§āϰāϧāĻžāύ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž āĻŦāĻžāϧāĻž āĻāϏāĻ•āĻŋāωāĻāϞ āĻĒā§āϰāĻļā§āύ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ LINQ āĻĒā§āϰāĻļā§āύ āĻāχāϗ⧁āϞāĻŋ āĻšāϞ:

  1. āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ⧇ āϏāĻŽāĻ—ā§āϰ āĻĄā§‡āϟāĻž āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻāĻ•āĻ¤ā§āϰ⧀āĻ•āϰāĻŖ
  2. āϕ⧋āĻĄā§‡āϰ āĻ…āύ⧁āϰ⧂āĻĒ āĻŦā§āϞāϕ⧇āϰ āύāĻ•āϞ, āϝāĻž āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĄā§‡āϟāĻž āĻĒāĻĄāĻŧāĻžāϰ āĻĻāĻŋāϕ⧇ āύāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧ
  3. āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āĻ—ā§āϰ⧁āĻĒ (āϝ⧌āĻ•ā§āϤāĻŋāĻ• "āĻāĻŦāĻ‚" āĻāĻŦāĻ‚ "āĻŦāĻž") - āĻāĻŦāĻ‚ и OR, āϜāϟāĻŋāϞ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻž, āĻāχ āϏāĻ¤ā§āϝ⧇āϰ āĻĻāĻŋāϕ⧇ āĻĒāϰāĻŋāϚāĻžāϞāĻŋāϤ āĻ•āϰ⧇ āϝ⧇ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜāĻžāϰ, āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧁āĻ•ā§āϤ āύāύ-āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰāĻĄ āϏ⧂āϚāĻ• āĻĨāĻžāĻ•āĻž, āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰāϝ⧁āĻ•ā§āϤ āϏ⧂āϚāϕ⧇āϰ āĻŦāĻŋāϰ⧁āĻĻā§āϧ⧇ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰ⧇ (āχāύāĻĄā§‡āĻ•ā§āϏ āĻ¸ā§āĻ•ā§āϝāĻžāύ) āĻļāĻ°ā§āϤ⧇āϰ āĻ—ā§āϰ⧁āĻĒ āĻĻā§āĻŦāĻžāϰāĻž
  4. āϏāĻžāĻŦāϕ⧋āϝāĻŧ⧇āϰāĻŋāϰ āĻ—āĻ­ā§€āϰ āύ⧇āĻ¸ā§āϟāĻŋāĻ‚ āĻĒāĻžāĻ°ā§āϏāĻŋāĻ‚āϕ⧇ āϖ⧁āĻŦ āϏāĻŽāĻ¸ā§āϝāĻžāϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āϤ⧋āϞ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āĻŦāĻŋāĻŦ⧃āϤāĻŋ āĻāĻŦāĻ‚ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āĻĒāĻ•ā§āώ āĻĨ⧇āϕ⧇ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒā§āĻ˛ā§āϝāĻžāύ⧇āϰ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻāĻŦāĻ‚ DBA

āĻ…āύ⧁āϕ⧂āϞāĻ•āϰāĻŖ āĻĒāĻĻā§āϧāϤāĻŋ

āĻāĻ–āύ āϏāϰāĻžāϏāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻ•āĨ¤

1) āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āχāύāĻĄā§‡āĻ•ā§āϏāĻŋāĻ‚

āĻĒā§āϰāϧāĻžāύ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϏāĻžāϰāĻŖā§€āϤ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞāĻŋ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ, āϝ⧇āĻšā§‡āϤ⧁ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻĒ⧁āϰ⧋ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀āϟāĻŋ āĻāĻ• āĻŦāĻž āĻĻ⧁āϟāĻŋ āĻĒā§āϰāϧāĻžāύ āĻŸā§‡āĻŦāĻŋāϞ (āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ-āϞ⧋āĻ•-āĻ…āĻĒāĻžāϰ⧇āĻļāύ) āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻŽāĻžāύāĻ• āϏ⧇āϟ (IsClosed, Canceled, Enabled, Status) āĻāϰ āϚāĻžāϰāĻĒāĻžāĻļ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āϚāĻŋāĻšā§āύāĻŋāϤ āύāĻŽā§āύāĻžāϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧁āĻ•ā§āϤ āϏ⧂āϚāĻ• āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāχ āϏāĻŽāĻžāϧāĻžāύāϟāĻŋ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻšāϝāĻŧ āϝāĻ–āύ āĻĒā§āϰāĻļā§āύ⧇ āĻĢāĻŋāϰ⧇ āφāϏāĻž āϏ⧇āϟāϟāĻŋāϕ⧇ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ•āϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻŽāĻžāĻĻ⧇āϰ 500000 āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ 2000 āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āφāϛ⧇āĨ¤ āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āϏ⧂āϚāĻ• āφāĻŽāĻžāĻĻ⧇āϰ āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŧ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āύāύ-āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰāĻĄ āϏ⧂āϚāϕ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĻā§āϰ⧁āϤ āĻĄā§‡āϟāĻž āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻŦ⧇āĨ¤

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒā§āĻ˛ā§āϝāĻžāύ āĻĒāĻžāĻ°ā§āϏāĻŋāĻ‚ āĻŦāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ­āĻŋāω āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āϏāĻ‚āĻ—ā§āϰāĻšā§‡āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻŽā§āĻĒāĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏ⧂āϚāϕ⧇āϰ āĻ…āĻ­āĻžāĻŦ āϚāĻŋāĻšā§āύāĻŋāϤ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāĻāϏ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ:

  1. sys.dm_db_missing_index_groups
  2. sys.dm_db_missing_index_group_stats
  3. sys.dm_db_missing_index_details

āϏāĻŽāĻ¸ā§āϤ āĻ­āĻŋāω āĻĄā§‡āϟāĻžāϤ⧇ āĻ¸ā§āĻĨāĻžāύāĻŋāĻ• āϏ⧂āϚāĻ•āϗ⧁āϞāĻŋ āĻŦāĻžāĻĻ āĻĻāĻŋāϝāĻŧ⧇ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āϏ⧂āĻšā§€āϗ⧁āϞāĻŋāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āϰāϝāĻŧ⧇āϛ⧇⧎

āϝāĻžāχāĻšā§‹āĻ•, āϏ⧂āĻšā§€ āĻāĻŦāĻ‚ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻ–āĻžāϰāĻžāĻĒāĻ­āĻžāĻŦ⧇ āϞ⧇āĻ–āĻžāϰ āĻĒāϰāĻŋāĻŖāϤāĻŋāϗ⧁āϞāĻŋāϰ āĻŦāĻŋāϰ⧁āĻĻā§āϧ⧇ āϞāĻĄāĻŧāĻžāχ āĻ•āϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ LINQ āĻĒā§āϰāĻļā§āύ и āĻāϏāĻ•āĻŋāωāĻāϞ āĻĒā§āϰāĻļā§āύ.

āĻœā§€āĻŦāύ⧇āϰ āĻ•āĻ ā§‹āϰ āĻ…āύ⧁āĻļā§€āϞāύ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāϏāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽāϝāĻŧāϏ⧀āĻŽāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻŦā§āϝāĻŦāϏāĻžāϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻāĻŦāĻ‚ āϏ⧇āχāϜāĻ¨ā§āϝ, āĻ­āĻžāϰ⧀ āĻ…āύ⧁āϰ⧋āϧāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāχ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āϏāĻš āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻšāϝāĻŧāĨ¤

āĻāϟāĻŋ āφāĻ‚āĻļāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ¨ā§āϝāĻžāϝāĻŧāϏāĻ™ā§āĻ—āϤ, āϝ⧇āĻšā§‡āϤ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϏāĻ°ā§āĻŦāĻĻāĻž āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻĄā§‡āϟāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ āύāĻž āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻļā§€āϞāϤāĻžāϰ āĻāĻ•āϟāĻŋ āĻ—ā§āϰāĻšāĻŖāϝ⧋āĻ—ā§āϝ āĻ¸ā§āϤāϰ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύāϗ⧁āϞāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ, āϤāĻŦ⧇ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋāϰ āϏāĻŽāĻžāϧāĻžāύāϗ⧁āϞāĻŋāϕ⧇ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻ•āϰ⧇ āϤāĻĨā§āϝ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻšā§āϰāĻžāϏ āĻ•āϰ⧇āĨ¤

āĻāϟāĻž āĻŽāύ⧇ āϰāĻžāĻ–āĻž āĻŽā§‚āĻ˛ā§āϝāĻŦāĻžāύ āϝ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏ⧂āĻšā§€ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ⧇āϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻāĻŽāĻāϏ āĻāϏāĻ•āĻŋāωāĻāϞ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āϭ⧁āϞ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āϏāĻš:

  1. āϝāĻĻāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧂āĻĒ āϏ⧇āϟ āϏāĻš āϏ⧂āĻšā§€ āĻĨāĻžāϕ⧇
  2. āϝāĻĻāĻŋ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞāĻŋ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏāĻŋāĻ‚ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āĻ•āĻžāϰāϪ⧇ āϏ⧂āϚāĻŋāϤ āĻ•āϰāĻž āύāĻž āϝāĻžāϝāĻŧ (āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤāĻ­āĻžāĻŦ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇) āĻāĻ–āĻžāύ⧇).

2) āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžā§ˇ

āĻ•āĻ–āύāĻ“ āĻ•āĻ–āύāĻ“ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĨ⧇āϕ⧇ āĻ•āĻŋāϛ⧁ āĻ•ā§āώ⧇āĻ¤ā§āϰ, āϝāĻž āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ—ā§āϰ⧁āĻĒ⧇āϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ•ā§āώ⧇āĻ¤ā§āϰ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻ•ā§āώ⧇āĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ āϏāĻ¤ā§āϝ, āϝ⧇āϗ⧁āϞāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦāĻŋāϟ āĻŦāĻž āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻžāϰ āĻšāϝāĻŧāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ:

āĻŦāĻ¨ā§āϧ = 0 āĻāĻŦāĻ‚ āĻŦāĻžāϤāĻŋāϞ = 0 āĻāĻŦāĻ‚ āϏāĻ•ā§āώāĻŽ = 0 āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāϤ āĻšāϝāĻŧ āĻ…āĻŦāĻ¸ā§āĻĨāĻž = 1.

āĻāĻ–āĻžāύ⧇āχ āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻž āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϝāĻžāϤ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧ āϝ⧇ āĻāχ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏāϗ⧁āϞāĻŋ āϏāĻžāϰāĻŖāĻŋāϤ⧇ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀, āĻāχ āύāϤ⧁āύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϏ⧂āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧ.

āĻāϟāĻŋ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻāĻ•āϟāĻŋ āĻŽā§ŒāϞāĻŋāĻ• āϏāĻŽāĻžāϧāĻžāύ, āĻ•āĻžāϰāĻŖ āφāĻŽāϰāĻž āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ—āĻŖāύāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ āĻĄā§‡āϟāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻŋāĨ¤

3) āĻĻ⧃āĻļā§āϝ⧇āϰ āĻŦāĻ¸ā§āϤ⧁āĻ—āϤ⧀āĻ•āϰāĻŖ

āĻĻ⧁āĻ°ā§āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ LINQ āĻĒā§āϰāĻļā§āύ āĻ…āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻŸā§‡āĻŦāĻŋāϞ, CTE, āĻāĻŦāĻ‚ āĻŸā§‡āĻŦāĻŋāϞ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϏāϰāĻžāϏāϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻžāĨ¤

āϝāĻžāχāĻšā§‹āĻ•, āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰāĻžāϰ āφāϰ⧇āĻ•āϟāĻŋ āωāĻĒāĻžāϝāĻŧ āφāϛ⧇ - āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻ­āĻŋāωāĨ¤

āĻļāĻ°ā§āϤ āĻ—ā§āϰ⧁āĻĒ (āωāĻĒāϰ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻĨ⧇āϕ⧇) āĻŦāĻ¨ā§āϧ = 0 āĻāĻŦāĻ‚ āĻŦāĻžāϤāĻŋāϞ = 0 āĻāĻŦāĻ‚ āϏāĻ•ā§āώāĻŽ = 0 (āĻ…āĻĨāĻŦāĻž āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ…āύ⧁āϰ⧂āĻĒ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ) āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŧ āϏ⧇āϟ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻžāϰ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ¸ā§āϞāĻžāχāϏ āĻ•ā§āϝāĻžāĻļ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻĻ⧃āĻļā§āϝ⧇ āϏ⧇āϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāϝāĻŧ⧇ āĻ“āϠ⧇āĨ¤

āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āĻĻ⧃āĻļā§āϝ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāϧāĻŋāύāĻŋāώ⧇āϧ āϰāϝāĻŧ⧇āϛ⧇:

  1. subqueries āĻŦā§āϝāĻŦāĻšāĻžāϰ, āϧāĻžāϰāĻž āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āωāϚāĻŋāϤ JOIN
  2. āφāĻĒāύāĻŋ āĻŦāĻžāĻ•ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āĻŽāĻŋāϞāύ, āχāωāύāĻŋāϝāĻŧāύ āϏāĻŦ, āĻ›āĻžāĻĄāĻŧ, āχāĻ¨ā§āϟāĻžāϰāĻ¸ā§āϝāĻžāĻ•ā§āϟ
  3. āφāĻĒāύāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āχāĻ™ā§āĻ—āĻŋāϤ āĻāĻŦāĻ‚ āϧāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ OPTION
  4. āϚāĻ•ā§āϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϕ⧋āύ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āύ⧇āχ
  5. āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŸā§‡āĻŦāĻŋāϞ āĻĨ⧇āϕ⧇ āĻāĻ• āĻ­āĻŋāωāϤ⧇ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻž āĻ…āϏāĻŽā§āĻ­āĻŦ

āĻāϟāĻž āĻŽāύ⧇ āϰāĻžāĻ–āĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϝ⧇ āĻāĻ•āϟāĻŋ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻĻ⧃āĻļā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻ•ā§ƒāϤ āϏ⧁āĻŦāĻŋāϧāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇ āϏ⧂āĻšā§€āĻ•āϰāϪ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻ•āϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāχ āϏ⧂āĻšā§€āϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻž, āĻāĻŦāĻ‚ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϏāĻ™ā§āϗ⧇ (NOEXPAND).

ā§§ Since āϏāĻžāϞ āĻĨ⧇āϕ⧇ LINQ āĻĒā§āϰāĻļā§āύ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āχāĻ™ā§āĻ—āĻŋāϤāϗ⧁āϞāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āĻ…āϏāĻŽā§āĻ­āĻŦ, āϤāĻžāχ āφāĻĒāύāĻžāϕ⧇ āφāϰ⧇āĻ•āϟāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻž āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ - āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĢāĻ°ā§āĻŽā§‡āϰ āĻāĻ•āϟāĻŋ "āĻ°ā§āϝāĻžāĻĒāĻžāϰ":

CREATE VIEW Đ˜ĐœĐ¯_ĐŋŅ€ĐĩĐ´ŅŅ‚Đ°Đ˛ĐģĐĩĐŊĐ¸Ņ AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇

āĻĒā§āϰāĻžāϝāĻŧāχ āĻŽāĻ§ā§āϝ⧇ LINQ āĻĒā§āϰāĻļā§āύ āϏāĻžāĻŦāϕ⧋āϝāĻŧ⧇āϰāĻŋāϰ āĻŦāĻĄāĻŧ āĻŦā§āϞāĻ• āĻŦāĻž āĻāĻ•āϟāĻŋ āϜāϟāĻŋāϞ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āĻ­āĻŋāω āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§āϞāĻ•āϗ⧁āϞāĻŋ āϖ⧁āĻŦ āϜāϟāĻŋāϞ āĻāĻŦāĻ‚ āϏāĻžāĻŦāĻ…āĻĒā§āϟāĻŋāĻŽāĻžāϞ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āĻĒā§āϰāĻļā§āύ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤

āĻŽāĻ§ā§āϝ⧇ āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻŽā§‚āϞ āϏ⧁āĻŦāĻŋāϧāĻž LINQ āĻĒā§āϰāĻļā§āύ:

  1. āĻ•ā§āώāĻŽāϤāĻž, āĻĻ⧃āĻļā§āϝ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻŋ āχāύāĻĒ⧁āϟ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:
    āĻĢāĻžāĻ‚āĻļāύ āĻĨ⧇āϕ⧇ (@param1, @param2 ...)
    āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ, āύāĻŽāύ⧀āϝāĻŧ āĻĄā§‡āϟāĻž āĻ¸ā§āϝāĻžāĻŽā§āĻĒāϞāĻŋāĻ‚ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇
  2. āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āωāĻĒāϰ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻĻ⧃āĻļā§āϝ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāĻŽāύ āϕ⧋āύ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻŦāĻŋāϧāĻŋāύāĻŋāώ⧇āϧ āύ⧇āχ:
    1. āĻŸā§‡āĻŦāĻŋāϞ āχāĻ™ā§āĻ—āĻŋāϤ:
      āĻĻā§āĻŦāĻžāϰāĻž āϞāĻŋāύāϕ⧁āχ āφāĻĒāύāĻŋ āϕ⧋āύ āϏ⧂āĻšā§€ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ āϤāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āĻāĻŦāĻ‚ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻĄā§‡āϟāĻž āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύāϤāĻž āĻ¸ā§āϤāϰ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤
      āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĢāĻžāĻ‚āĻļāύ āĻāχ āĻ•ā§āώāĻŽāϤāĻž āφāϛ⧇.
      āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āĻ§ā§āϰ⧁āĻŦāĻ• āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒā§āĻ˛ā§āϝāĻžāύ āĻ…āĻ°ā§āϜāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝ⧇āĻ–āĻžāύ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻž āφāχāϏ⧋āϞ⧇āĻļāύ āϞ⧇āϭ⧇āϞāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧ
    2. āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻĻ⧃āĻļā§āϝ⧇āϰ āϏāĻžāĻĨ⧇ āϤ⧁āϞāύāĻž āĻ•āϰ⧇, āĻĒā§āϰāĻžāĻĒā§āϤ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ:
      • āϜāϟāĻŋāϞ āĻĄā§‡āϟāĻž āĻ¸ā§āϝāĻžāĻŽā§āĻĒāϞāĻŋāĻ‚ āϞāϜāĻŋāĻ• (āĻāĻŽāύāĻ•āĻŋ āϞ⧁āĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇)
      • āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŸā§‡āĻŦāĻŋāϞ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āφāύāĻž āĻšāĻšā§āϛ⧇
      • āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻŽāĻŋāϞāύ и āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ

  3. āĻĒā§āϰāĻĻāĻžāύ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ OPTION āϝāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϝ⧋āϗ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ āϤāĻ–āύ āϖ⧁āĻŦ āĻĻāϰāĻ•āĻžāϰ⧀ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ (MAXDOP N), āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ āĻĒā§āĻ˛ā§āϝāĻžāύ⧇āϰ āĻ•ā§āϰāĻŽāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ āĻ¸ā§āĻŦāϰ⧂āĻĒ:
    • āφāĻĒāύāĻŋ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻžāϰ āĻāĻ•āϟāĻŋ āĻœā§‹āϰāĻĒā§‚āĻ°ā§āĻŦāĻ• āĻĒ⧁āύāσāϏ⧃āĻˇā§āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ (āĻĒ⧁āύāσāĻ•āĻŽā§āĻĒāĻžāχāϞ)
    • āφāĻĒāύāĻŋ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀āϤ⧇ āωāĻ˛ā§āϞ⧇āĻ–āĻŋāϤ āϝ⧋āĻ—āĻĻāĻžāύ⧇āϰ āφāĻĻ⧇āĻļ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒā§āĻ˛ā§āϝāĻžāύāϕ⧇ āĻŦāĻžāĻ§ā§āϝ āĻ•āϰāĻŦ⧇āύ āĻ•āĻŋāύāĻž āϤāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ (āĻĢā§‹āĻ°ā§āϏ āĻ…āĻ°ā§āĻĄāĻžāϰ)

    āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ OPTION āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻāĻ–āĻžāύ⧇.

  4. āϏāĻ‚āϕ⧀āĻ°ā§āĻŖ āĻāĻŦāĻ‚ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĄā§‡āϟāĻž āĻ¸ā§āϞāĻžāχāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇:
    āĻ•ā§āϝāĻžāĻļ⧇ āĻŦāĻĄāĻŧ āĻĄā§‡āϟāĻž āϏ⧇āϟ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻžāϰ āϕ⧋āύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ (āϝ⧇āĻŽāύāϟāĻŋ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻ­āĻŋāωāϝāĻŧ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇), āϝ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ āφāĻĒāύāĻžāϕ⧇ āĻāĻ–āύāĻ“ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻĄā§‡āϟāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤
    āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āφāϛ⧇ āϝāĻžāϰ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϕ⧋āĻĨāĻžāϝāĻŧ āϤāĻŋāύāϟāĻŋ āĻ•ā§āώ⧇āĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ (a, b, c).

    āĻĒā§āϰāϚāϞāĻŋāϤāĻ­āĻžāĻŦ⧇, āϏāĻŽāĻ¸ā§āϤ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻāĻ•āϟāĻŋ āĻ§ā§āϰ⧁āĻŦāĻ• āĻ…āĻŦāĻ¸ā§āĻĨāĻž āφāϛ⧇ a = 0 āĻāĻŦāĻ‚ b = 0.

    āϤāĻŦ⧇ āĻŽāĻžāϠ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ⧁āϰ⧋āϧ c āφāϰ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞāĨ¤

    āĻļāĻ°ā§āϤ āϝāĻžāĻ• a = 0 āĻāĻŦāĻ‚ b = 0 āĻāϟāĻž āϏāĻ¤ā§āϝāĻŋāχ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĢāϞāĻžāĻĢāϞ āϏ⧇āϟ āĻšāĻžāϜāĻžāϰ āĻšāĻžāϜāĻžāϰ āϰ⧇āĻ•āĻ°ā§āĻĄ āϏ⧀āĻŽāĻŋāϤ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻļāĻ°ā§āϤ āϚāĻžāϞ⧁ āφāϛ⧇ ҁ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύāϕ⧇ āĻāĻ•āĻļā§‹ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡ āϏāĻ‚āϕ⧁āϚāĻŋāϤ āĻ•āϰ⧇āĨ¤

    āĻāĻ–āĻžāύ⧇ āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻžāĻ‚āĻļāύ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāϤ⧇ āĻĒāĻžāϰ⧇.

    āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻžāĻ‚āĻļāύ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āφāϰāĻ“ āĻ…āύ⧁āĻŽāĻžāύāϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ

āφāϏ⧁āύ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒā§āϰāĻļā§āύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻĻ⧇āĻ–āĻŋāĨ¤

āĻāĻ•āϟāĻž āĻ…āύ⧁āϰ⧋āϧ āφāϛ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ, āϝāĻž āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞāϕ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ­āĻŋāω āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ (āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ), āϝ⧇āĻ–āĻžāύ⧇ āĻ…āϧāĻŋāϭ⧁āĻ•ā§āϤāĻŋ āχāĻŽā§‡āϞ āĻĻā§āĻŦāĻžāϰāĻž āĻšā§‡āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ (āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ) āĻĨ⧇āϕ⧇ "āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ":

āĻ…āύ⧁āϰ⧋āϧ āύāĻ‚ 1

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM [dbo].[Questions] AS [Extent1]
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id],
[Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId],
[Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]) AND ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[OperativeQuestions] AS [Extent5]
WHERE (([Extent5].[Email] = @p__linq__0) OR (([Extent5].[Email] IS NULL) 
AND (@p__linq__0 IS NULL))) AND ([Extent5].[Id] = [Extent1].[Id])
));

āĻ­āĻŋāωāϟāĻŋāϰ āĻāĻ•āϟāĻŋ āĻŦāϰāĻ‚ āϜāϟāĻŋāϞ āĻ—āĻ āύ āϰāϝāĻŧ⧇āϛ⧇: āĻāϤ⧇ āϏāĻžāĻŦāϕ⧋āϝāĻŧ⧇āϰāĻŋ āϝ⧋āĻ— āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāĻ›āĻžāχ āĻ•āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰ, āϝāĻž āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āϏāĻŽā§āĻĒāĻĻ-āύāĻŋāĻŦāĻŋāĻĄāĻŧ āĻ…āĻĒāĻžāϰ⧇āĻļāύāĨ¤

OperativeQuestions āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŽā§āύāĻž āĻĒā§āϰāĻžāϝāĻŧ āĻĻāĻļ āĻšāĻžāϜāĻžāϰ āϰ⧇āĻ•āĻ°ā§āĻĄ.

āĻāχ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀āϟāĻŋāϰ āĻĒā§āϰāϧāĻžāύ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ āϝ⧇ āĻŦāĻžāχāϰ⧇āϰ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĨ⧇āϕ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϏāĻžāĻŦāϕ⧋āϝāĻŧ⧇āϰāĻŋ [OperativeQuestions] āĻ­āĻŋāωāϤ⧇ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϝāĻž [āχāĻŽā§‡āϞ] = @p__linq__0 āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āφāωāϟāĻĒ⧁āϟ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āϏ⧀āĻŽāĻŋāϤ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ (āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ) āĻļāϤ āĻļāϤ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĒāĻ°ā§āϝāĻ¨ā§āϤāĨ¤

āĻāĻŦāĻ‚ āĻāϟāĻž āĻŽāύ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇ āϏāĻžāĻŦāϕ⧋āϝāĻŧ⧇āϰāĻŋāϰ āϰ⧇āĻ•āĻ°ā§āĻĄāϗ⧁āϞāĻŋ āĻāĻ•āĻŦāĻžāϰ [āχāĻŽā§‡āϞ] = @p__linq__0 āĻĻā§āĻŦāĻžāϰāĻž āĻ—āĻŖāύāĻž āĻ•āϰāĻž āωāϚāĻŋāϤ, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻāχ āĻ•āϝāĻŧ⧇āĻ•āĻļ āϰ⧇āĻ•āĻ°ā§āĻĄāϗ⧁āϞāĻŋāϕ⧇ āĻĒā§āϰāĻļā§āύāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āφāχāĻĄāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āωāϚāĻŋāϤ āĻāĻŦāĻ‚ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻĻā§āϰ⧁āϤ āĻšāĻŦ⧇⧎

āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇, āϏāĻŽāĻ¸ā§āϤ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āĻ•ā§āϰāĻŽāĻŋāĻ• āϏāĻ‚āϝ⧋āĻ— āϰāϝāĻŧ⧇āϛ⧇: āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ āĻĨ⧇āϕ⧇ āφāχāĻĄāĻŋāϰ āϏāĻžāĻĨ⧇ āφāχāĻĄāĻŋ āĻĒā§āϰāĻļā§āύ⧇āϰ āϚāĻŋāĻ āĻŋāĻĒāĻ¤ā§āϰ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻāĻŦāĻ‚ āχāĻŽā§‡āϞ āĻĻā§āĻŦāĻžāϰāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāĻžāĨ¤

āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇, āĻ…āύ⧁āϰ⧋āϧāϟāĻŋ āĻšāĻžāϜāĻžāϰ āĻšāĻžāϜāĻžāϰ āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϤāĻŦ⧇ āχāĻŽā§‡āϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āφāĻ—ā§āϰāĻšā§‡āϰ āĻĄā§‡āϟāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤

āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ āĻĒāĻžāĻ ā§āϝ āĻĻ⧇āϖ⧁āύ:

āĻ…āύ⧁āϰ⧋āϧ āύāĻ‚ 2

 
CREATE VIEW [dbo].[OperativeQuestions]
AS
SELECT DISTINCT Q.Id, USR.email AS Email
FROM            [dbo].Questions AS Q INNER JOIN
                         [dbo].ProcessUserAccesses AS BPU ON BPU.ProcessId = CQ.Process_Id 
OUTER APPLY
                     (SELECT   1 AS HasNoObjects
                      WHERE   NOT EXISTS
                                    (SELECT   1
                                     FROM     [dbo].ObjectUserAccesses AS BOU
                                     WHERE   BOU.ProcessUserAccessId = BPU.[Id] AND BOU.[To] IS NULL)
) AS BO INNER JOIN
                         [dbo].Users AS USR ON USR.Id = BPU.UserId
WHERE        CQ.[Exp] = 0 AND CQ.AnswerId IS NULL AND BPU.[To] IS NULL 
AND (BO.HasNoObjects = 1 OR
              EXISTS (SELECT   1
                           FROM   [dbo].ObjectUserAccesses AS BOU INNER JOIN
                                      [dbo].ObjectQuestions AS QBO 
                                                  ON QBO.[Object_Id] =BOU.ObjectId
                               WHERE  BOU.ProcessUserAccessId = BPU.Id 
                               AND BOU.[To] IS NULL AND QBO.Question_Id = CQ.Id));

DbContext-āĻ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻ­āĻŋāω āĻŽā§āϝāĻžāĻĒāĻŋāĻ‚ (EF āϕ⧋āϰ 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}

āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• LINQ āĻĒā§āϰāĻļā§āύ

var businessObjectsData = await context
    .OperativeQuestions
    .Where(x => x.Email == Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

āĻāχ āĻŦāĻŋāĻļ⧇āώ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻŽāϰāĻž āĻĒāϰāĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹āĻ—āϤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻ›āĻŋ, āϰ⧇āĻĄāĻŋāĻŽā§‡āĻĄ āĻĢāϞāĻžāĻĢāϞ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āϏāĻžāϰāĻŖā§€ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āύāĻž āĻ•āϰ⧇ ("āĻ…ā§āϝāĻžāĻ•āϟāĻŋāĻ­ āϕ⧋āϝāĻŧ⧇āϰāĻŋ"), āϝāĻžāϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻĄā§‡āϟāĻž āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§‚āϰāĻŖ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āĻāϟāĻŋ āφāĻĒ āϟ⧁ āĻĄā§‡āϟ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇āĨ¤ .

āϝāĻĻāĻŋāĻ“ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āϏāĻŽāĻžāϧāĻžāύ, āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰāĻžāϰ āφāϰ⧇āĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻŽā§‚āϞ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻšāϞ āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ āĻ­āĻŋāω āĻĨ⧇āϕ⧇ [āχāĻŽā§‡āϞ] = @p__linq__0 āĻĻā§āĻŦāĻžāϰāĻž āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻ•ā§āϝāĻžāĻļ⧇ āĻ•āϰāĻžāĨ¤

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻžāĻ‚āĻļāύ [āĻĄāĻŋāĻŦāĻŋāĻ“] [āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ­ āĻĒā§āϰāĻļā§āύ āχāωāϜāĻžāϰāĻŽā§‡āϞ] āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āχāύāĻĒ⧁āϟ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āχāĻŽā§‡āϞ āĻĒāĻžāĻ āĻžāύ⧋āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡, āφāĻŽāϰāĻž āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĢāĻŋāϰ⧇ āĻĒāĻžāχ:

āĻ…āύ⧁āϰ⧋āϧ āύāĻ‚ 3


CREATE FUNCTION [dbo].[OperativeQuestionsUserMail]
(
    @Email  nvarchar(4000)
)
RETURNS
@tbl TABLE
(
    [Id]           uniqueidentifier,
    [Email]      nvarchar(4000)
)
AS
BEGIN
        INSERT INTO @tbl ([Id], [Email])
        SELECT Id, @Email
        FROM [OperativeQuestions]  AS [x] WHERE [x].[Email] = @Email;
     
    RETURN;
END

āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ āϏāĻš āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤

OperativeQuestionsUserMail-āĻāϰ āĻĒā§āϰāĻļā§āύāϗ⧁āϞāĻŋ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻšāϤ⧇ āĻāĻŦāĻ‚ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻ•āĻ ā§‹āϰ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ, āĻāĻŦāĻ‚ āύāϝāĻŧ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŸā§‡āĻŦāĻŋāϞ āĻĢ⧇āϰāϤ...

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ 1 āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ 4 āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻšāϝāĻŧ:

āĻ…āύ⧁āϰ⧋āϧ āύāĻ‚ 4

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM (
    SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] (@p__linq__0)
) AS [Extent0]
INNER JOIN [dbo].[Questions] AS [Extent1] ON([Extent0].Id=[Extent1].Id)
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id], [Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId], [Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]);

DbContext (EF āϕ⧋āϰ 2) āĻ āĻŽā§āϝāĻžāĻĒāĻŋāĻ‚ āĻ­āĻŋāω āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāύ

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}
 
public static class FromSqlQueries
{
    public static IQueryable<OperativeQuestion> GetByUserEmail(this DbQuery<OperativeQuestion> source, string Email)
        => source.FromSql($"SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] ({Email})");
}

āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ LINQ āĻĒā§āϰāĻļā§āύ

var businessObjectsData = await context
    .OperativeQuestions
    .GetByUserEmail(Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

āĻ•āĻžāĻ°ā§āϝ āϏāĻŽā§āĻĒāĻžāĻĻāύ⧇āϰ āϏāĻŽāϝāĻŧ 200-800 ms āĻĨ⧇āϕ⧇ 2-20 ms, āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϤ⧇ āύ⧇āĻŽā§‡ āĻāϏ⧇āϛ⧇, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĻāĻļāϗ⧁āĻŖ āĻĻā§āϰ⧁āϤāĨ¤

āϝāĻĻāĻŋ āφāĻŽāϰāĻž āĻāϟāĻŋāϕ⧇ āφāϰāĻ“ āĻ—āĻĄāĻŧāĻ­āĻžāĻŦ⧇ āύāĻŋāχ, āϤāĻžāĻšāϞ⧇ 350 ms āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāϰāĻž 8 ms āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋāĨ¤

āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āϏ⧁āĻŦāĻŋāϧāĻžāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āφāĻŽāϰāĻžāĻ“ āĻĒāĻžāχ:

  1. āĻĒāĻĄāĻŧāĻžāϰ āϞ⧋āĻĄā§‡āϰ āϏāĻžāϧāĻžāϰāĻŖ āĻšā§āϰāĻžāϏ,
  2. āĻŦā§āϞāĻ• āĻ•āϰāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝ āĻšā§āϰāĻžāϏ
  3. āĻ—ā§āϰāĻšāĻŖāϝ⧋āĻ—ā§āϝ āĻŽāĻžāύāϗ⧁āϞāĻŋāϤ⧇ āĻ—āĻĄāĻŧ āĻŦā§āϞāĻ•āĻŋāĻ‚ āϏāĻŽāϝāĻŧ āĻšā§āϰāĻžāϏ āĻ•āϰāĻž

āωāĻĒāϏāĻ‚āĻšāĻžāϰ

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•āϞ⧇āϰ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻāĻŦāĻ‚ āĻĢāĻžāχāύ-āϟāĻŋāωāύāĻŋāĻ‚ āĻāĻŽāĻāϏ āĻāϏāĻ•āĻŋāωāĻāϞ āĻĻā§āĻŦāĻžāϰāĻž āϞāĻŋāύāϕ⧁āχ āĻāĻ•āϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻž āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāχ āĻ•āĻžāĻœā§‡ āĻŽāύ⧋āϝ⧋āĻ— āĻāĻŦāĻ‚ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ•āϤāĻž āϖ⧁āĻŦāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤

āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻļ⧁āϰ⧁āϤ⧇:

  1. āĻ…āύ⧁āϰ⧋āϧāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŽāύ āĻĄā§‡āϟāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ (āĻŽāĻžāύ, āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•āĻžāϰ)
  2. āĻāχ āϤāĻĨā§āϝ āϏāĻ āĻŋāĻ• āϏ⧂āĻšā§€ āĻŦāĻšāύ
  3. āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϝ⧋āĻ—āĻĻāĻžāύ⧇āϰ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āϏāĻ āĻŋāĻ•āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇:

  1. āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāϧāĻžāύ āĻ…āύ⧁āϰ⧋āϧ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇
  2. āĻ…āύ⧁āϰ⧂āĻĒ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻŦā§āϞāĻ• āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻāĻŦāĻ‚ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āϛ⧇āĻĻ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ
  3. āĻāϰ āϜāĻ¨ā§āϝ SSMS āĻŦāĻž āĻ…āĻ¨ā§āϝ GUI-āϤ⧇ SQL āϏāĻžāĻ°ā§āĻ­āĻžāϰ āύāĻŋāĻœā§‡āϕ⧇ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϕ⧋āϝāĻŧ⧇āϰāĻŋ (āĻāĻ•āϟāĻŋ āĻŽāĻ§ā§āϝāĻŦāĻ°ā§āϤ⧀ āĻĄā§‡āϟāĻž āϏāĻžā§āϚāϝāĻŧāĻ¸ā§āĻĨāĻžāύ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻž, āĻāχ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĢāϞāĻžāĻĢāϞ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āϤ⧈āϰāĻŋ āĻ•āϰāĻž (āĻāĻ–āĻžāύ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇))
  4. āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇, āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ—ā§āϰāĻšāĻŖ āĻĢāϞāĻžāĻĢāϞ āĻāϏāĻ•āĻŋāωāĻāϞ āϕ⧋āϝāĻŧ⧇āϰāĻŋ, āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ LINQ āĻĒā§āϰāĻļā§āύ

āĻĢāϞ⧇ LINQ āĻĒā§āϰāĻļā§āύ āϚāĻŋāĻšā§āύāĻŋāϤ āĻ…āύ⧁āϕ⧂āϞ āĻĨ⧇āϕ⧇ āĻ—āĻ āύ āĻ…āĻ­āĻŋāĻ¨ā§āύ āĻšāϤ⧇ āĻšāĻŦ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ 3 āĻĨ⧇āϕ⧇āĨ¤

āĻ¸ā§āĻŦā§€āĻ•ā§ƒāϤāĻŋ

āϏāĻšāĻ•āĻ°ā§āĻŽā§€āĻĻ⧇āϰ āĻ…āύ⧇āĻ• āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ jobgemws и alex_ozr āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻŸā§āϰāĻ‚ āĻāχ āωāĻĒāĻžāĻĻāĻžāύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻžāϰ āϜāĻ¨ā§āϝāĨ¤

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster