Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebエンジニアのためのMySQL入門 / learning mysql for web developer

Mihyaeru
July 06, 2017

WebエンジニアのためのMySQL入門 / learning mysql for web developer

入門の次くらいの内容だった...

Mihyaeru

July 06, 2017
Tweet

More Decks by Mihyaeru

Other Decks in Technology

Transcript

  1. WebΤϯδχΞͷͨΊͷ

    MySQLೖ໳
    2017-07-06 αϙʔλʔζ CoLab
    @mihyaeru21

    View Slide

  2. ࣗݾ঺հ
    • ϛώϟΤϧ @mihyaeru21
    • ৬ྺ
    • 2014-04 גࣜձࣾϞόΠϧϑΝΫτϦʔ
    • αϙʔλʔζܦ༝
    • Ґஔ৘ใήʔϜ x 3
    • 2016-10 freeeגࣜձࣾ
    • ձܭαʔϏε
    • ػೳ։ൃͱ͔ύϑΥʔϚϯενϡʔχϯάͱ͔
    • ओʹαʔόʔαΠυͰΫϥΠΞϯτ΋΍Δ

    View Slide

  3. ͳͥ஌Δඞཁ͕͋Δͷ͔
    • Web։ൃͰ͸ORMΛ࢖͏͜ͱ͕ଟ͍ʢͨͿΜʣ
    • ORM͸͍Ζ͍Ζͱศར
    • ൓໘...
    • ͲΜͳΫΤϦʹͳΔͷ͔Θ͔Γʹ͍͘৔߹͋Γ
    • ࣮ଶ͕DBͰɺSQLΛ࣮ߦ͍ͯ͠Δҙ͕ࣝബΕ͕ͪ
    • ࣮ଶΛҙࣝ͠ͳ͍ͱ...
    • ਂࠁͳύϑΥʔϚϯε໰୊ͷՄೳੑ
    • DBಛ༗ͷڍಈͰϋϚΔ

    View Slide

  4. ͱ͍͏Θ͚ͰMySQLʹ͍ͭͯ

    View Slide

  5. ର৅ऀ
    • Web։ൃΛ΍ͬͯΔ
    • ΠϯσοΫε͸஌ͬͯΔ͠࢖͑Δ
    • ͱ͸͍͑งғؾͰDB·ΘΓΛѻ͍ͬͯΔ
    • (࣮ફϋΠύϑΥʔϚϯεMySQLͱ͔ΛͪΌΜͱಡΜͩ
    ͜ͱ͕͋ΔͳΒฉ͘ඞཁ͕·ͬͨ͘ͳ͍Ͱ͢)

    View Slide

  6. ͬ͘͟Γͨ͠໨࣍
    • MySQLͷΞʔΩςΫνϟ
    • ςʔϒϧ΍ΠϯσοΫεͷσʔλߏ଄
    • ύϑΥʔϚϯεʹؔ܎͢Δ࿩
    • ڍಈʹؔ܎͢Δ࿩

    View Slide

  7. MySQLͷΞʔΩςΫνϟ
    αʔόʔ
    ετϨʔδΤϯδϯ
    ετϨʔδΤϯδϯAPI
    ΫϥΠΞϯτͱͷ઀ଓ
    ※͜ͷࢿྉʹ͓͍ͯαʔόʔͱಡΜͰ͍Δ෦෼͸MySQLͷαʔόʔͷ͏ͪɺετϨʔδΤϯδϯͰͳ͍෦෼ͷ૯শͰ͢ɻ
    ͏·͍૯শ͕ͳ͍ͷͰɺ࣮ફϋΠύϑΥʔϚϯεMySQLʹशͬͯαʔόʔͱݺͿ͜ͱʹ͠·͢ɻ

    View Slide

  8. αʔόʔ
    αʔόʔ
    ετϨʔδΤϯδϯ
    • ӬଓԽʹؔΘΔ෦෼Ҏ֎
    • ΫΤϦͷղੳ
    • ࠷దԽ
    • ࣮ߦ
    • ΫΤϦΩϟογϡ
    • ઀ଓॲཧ
    • etc...

    View Slide

  9. αʔόʔ
    ετϨʔδΤϯδϯ
    ετϨʔδΤϯδϯ
    • σʔλͷӬଓԽΛ࢘Δ
    • ΠϯσοΫε
    • τϥϯβΫγϣϯ
    • ετϨʔδΤϯδϯAPI
    • ετϨʔδΤϯδϯ͸໨తʹԠͯ͡

    બͿ͜ͱ͕Ͱ͖Δ

    View Slide

  10. ༷ʑͳετϨʔδΤϯδϯ
    • InnoDB
    • MyISAM
    • MEMORY
    • CSV
    • BLACKHOLE
    • MyRocks
    • etc... (see https://dev.mysql.com/doc/refman/5.6/ja/storage-engines.html )

    View Slide

  11. InnoDB
    • MySQL 5.5Ҏ߱ͷσϑΥϧτ
    • τϥϯβΫγϣϯ͕࢖͑Δ
    • ֎෦Ωʔ੍໿͕࢖͑Δ
    • ଞͷετϨʔδΤϯδϯΛ࢖͏ඞવੑΛઆ໌Ͱ͖ͳ͍
    ͳΒ͜ΕΛ࢖͑͹OK
    • ͜ͷޙͷ࿩͸InnoDBʹ͍ͭͯͷ࿩

    View Slide

  12. MyISAM
    • MySQL 5.5ΑΓલͷσϑΥϧτ
    • ۭؒΠϯσοΫε͕࢖͑Δ
    • (InnoDBͰ΋5.7.5Ҏ߱ͳΒ࢖͑Δ)
    • τϥϯβΫγϣϯ͕࢖͑ͳ͍
    • ςʔϒϧ୯ҐͰ͔͠ϩοΫͰ͖ͳ͍

    View Slide

  13. ͦͷଞ
    • MEMORY
    • ϝϞϦ಺ͷΈɻফ͑ͯ΋໰୊ͳ͍σʔλ͚ͩ
    • CSV
    • CSVϑΝΠϧʹอଘ͞ΕΔ
    • BLACKHOLE
    • Կ΋อଘ͠ͳ͍ʢʁʂʣ
    • MyRocks
    • Facebook͕InnoDBͰਏ͘ͳͬͯ࡞ͬͨ΍ͭ
    • লσΟεΫεϖʔεɺߴॻ͖ࠐΈੑೳ

    View Slide

  14. ※Ҏ߱͸InnoDBʹ͍ͭͯͷ࿩Ͱ͢

    View Slide

  15. ςʔϒϧͷσʔλߏ଄
    • ࿦ཧతͳσʔλߏ଄͸୯७ͳϋογϡͷ഑ྻͰ͸ͳ͍
    <
    \JE OBNF෨^
    \JE OBNFߴ໺^
    \JE OBNFాத^

    >

    View Slide

  16. ςʔϒϧͷσʔλߏ଄
    • ࿦ཧతͳσʔλߏ଄͸୯७ͳϋογϡͷ഑ྻͰ͸ͳ͍
    <
    \JE OBNF෨^
    \JE OBNFߴ໺^
    \JE OBNFాத^

    >

    View Slide

  17. ٸ͕͹ճΕ
    • ઌʹΠϯσοΫεͷσʔλߏ଄
    • InnoDBͷσϑΥϧτͰ͸B+໦ͱ͍͏σʔλߏ଄
    ※Ҏ߱ɺΠϯσοΫε͸B+໦લఏͷ࿩Ͱ͢

    View Slide

  18. B໦
    • ͞ΒʹճΓಓ
    • B+໦ͷલʹB໦ʢ໊લ͔Β࡯͍ͯͩ͘͠͞ʣ
    • ໦ߏ଄
    • ฏߧ໦

    View Slide

  19. B໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28

    View Slide

  20. B໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    ϊʔυ
    ※Ϧʔϑϊʔυͷදݱํ๏͸͍͔ͭ͋͘Γ·͢
    ※͜ͷਤͰ͸Լଆͷ3͕ͭϦʔϑϊʔυʹͳΓ·͢

    View Slide

  21. B໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    Ωʔ

    View Slide

  22. B໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    ϊʔυΛࢦ͢ϙΠϯλ

    View Slide

  23. B໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    ֨ೲ͞ΕΔ஋

    View Slide

  24. B໦: ݕࡧ
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    ݕࡧ஋x͕9

    View Slide

  25. B໦: ݕࡧ
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    8 ≦ x < 13
    ݕࡧ஋x͕9

    View Slide

  26. B໦: ݕࡧ
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    ݕࡧ஋x͕9
    8 ≦ x < 13
    x = 9

    View Slide

  27. B໦: ݕࡧ
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    15
    15
    10
    10
    20
    20
    28
    28
    ݕࡧ஋x͕9
    8 ≦ x < 13
    x = 9

    View Slide

  28. B+໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    10
    10
    15
    15
    20
    20
    28
    28

    View Slide

  29. B+໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    10
    10
    15
    15
    20
    20
    28
    28
    Ϧʔϑϊʔυͷ຤ඌ͕࣍ͷϦʔϑϊʔυΛࢦ͢

    View Slide

  30. B+໦
    8 13
    2
    2
    3
    3
    6
    6
    8
    8
    9
    9
    10
    10
    15
    15
    20
    20
    28
    28
    ιʔτࡁΈͷ஋Λૉૣ͘ಡΈऔΕΔ

    View Slide

  31. ΠϯσοΫε
    • B+໦ͷߏ଄Ͱσʔλ͕֨ೲ͞ΕΔ

    View Slide

  32. ΠϯσοΫε
    8 13
    2 3 6 8 9 10 15 20 28

    View Slide

  33. ΠϯσοΫε
    ʁʁʁ
    8 13
    2 3 6 8 9 10 15 20 28

    View Slide

  34. ΠϯσοΫε
    ओΩʔ͕ೖΔ
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9

    View Slide

  35. ηΧϯμϦΠϯσοΫε
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9
    • ओΩʔҎ֎ͷΠϯσοΫε͸ࠓઆ໌ͨ͠ߏ଄
    • ηΧϯμϦΠϯσοΫεͱݺͿ

    View Slide

  36. ςʔϒϧͷσʔλߏ଄
    • ΍ͬͱؼ͖ͬͯ·ͨ͠

    View Slide

  37. ςʔϒϧͷσʔλߏ଄
    4 7
    1 2
    ্ా
    4/29
    10
    3
    ࡾӜ
    7/5
    8
    ໊લ
    ஀ੜ೔
    ฒͼॱ
    ্໺
    1/8
    20
    4 5
    தౡ
    1/16
    15
    6
    தࢁ
    12/27
    2
    த઒
    2/2
    9
    7 8
    த໺
    3/13
    3
    9
    தଜ
    11/25
    6
    Ճ౻
    9/23
    28

    View Slide

  38. ςʔϒϧͷσʔλߏ଄
    4 7
    1 2
    ্ా
    4/29
    10
    3
    ࡾӜ
    7/5
    8
    ໊લ
    ஀ੜ೔
    ฒͼॱ
    ্໺
    1/8
    20
    4 5
    தౡ
    1/16
    15
    6
    தࢁ
    12/27
    2
    த઒
    2/2
    9
    7 8
    த໺
    3/13
    3
    9
    தଜ
    11/25
    6
    Ճ౻
    9/23
    28
    B+໦ͷߏ଄ͦͷ··
    Ϧʔϑϊʔυʹ࣮σʔλ͕ೖ͍ͬͯΔ

    View Slide

  39. ςʔϒϧͷσʔλߏ଄
    4 7
    1 2
    ্ా
    4/29
    10
    3
    ࡾӜ
    7/5
    8
    ໊લ
    ஀ੜ೔
    ฒͼॱ
    ্໺
    1/8
    20
    4 5
    தౡ
    1/16
    15
    6
    தࢁ
    12/27
    2
    த઒
    2/2
    9
    7 8
    த໺
    3/13
    3
    9
    தଜ
    11/25
    6
    Ճ౻
    9/23
    28
    • ओΩʔͰΫϥελԽ͞Ε͍ͯΔ
    • ΫϥελԽΠϯσοΫε

    View Slide

  40. ηΧϯμϦΠϯσοΫεΛ࢖ͬͨݕࡧ
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9

    View Slide

  41. ηΧϯμϦΠϯσοΫεΛ࢖ͬͨݕࡧ
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9
    ฒͼॱ = 10

    View Slide

  42. ηΧϯμϦΠϯσοΫεΛ࢖ͬͨݕࡧ
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9
    ฒͼॱ = 10
    ओΩʔ = 2

    View Slide

  43. ηΧϯμϦΠϯσοΫεΛ࢖ͬͨݕࡧ
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9
    ฒͼॱ = 10
    4 7
    1 2
    ্ా
    4/29
    10
    3
    ࡾӜ
    7/5
    8
    ໊લ
    ஀ੜ೔
    ฒͼॱ
    ্໺
    1/8
    20
    4 5
    தౡ
    1/16
    15
    6
    தࢁ
    12/27
    2
    த઒
    2/2
    9
    7 8
    த໺
    3/13
    3
    9
    தଜ
    11/25
    6
    Ճ౻
    9/23
    28

    View Slide

  44. ηΧϯμϦΠϯσοΫεΛ࢖ͬͨݕࡧ
    8 13
    2
    4
    3
    8
    6
    7
    8
    1
    9
    6
    10
    2
    15
    5
    20
    3
    28
    9
    ฒͼॱ = 10
    4 7
    1 2
    ্ా
    4/29
    10
    3
    ࡾӜ
    7/5
    8
    ໊લ
    ஀ੜ೔
    ฒͼॱ
    ্໺
    1/8
    20
    4 5
    தౡ
    1/16
    15
    6
    தࢁ
    12/27
    2
    த઒
    2/2
    9
    7 8
    த໺
    3/13
    3
    9
    தଜ
    11/25
    6
    Ճ౻
    9/23
    28

    View Slide

  45. Ҏ্͕جຊతͳߏ଄ͷ࿩

    View Slide

  46. ͬ͘͟Γͨ͠໨࣍
    • MySQLͷΞʔΩςΫνϟ
    • ςʔϒϧ΍ΠϯσοΫεͷσʔλߏ଄
    • ύϑΥʔϚϯεʹؔ܎͢Δ࿩
    • ڍಈʹؔ܎͢Δ࿩

    View Slide

  47. ύϑΥʔϚϯεʹؔ܎͢Δ࿩
    • ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔͷ͔
    • ΠϯσοΫε͸ࠨ͔Βӈ
    • ෳ߹ΠϯσοΫε
    • NOTͷѻ͍
    • NULLͷѻ͍
    • ιʔτ
    • ΧόϦϯάΠϯσοΫε

    View Slide

  48. ςʔϒϧ
    • id
    • ໊લ
    • ஀ੜ೔
    • ݂ӷܕ
    • ฒͼॱʢ͖ͯͱʔͳ਺ࣈʣ
    • ి࿩൪߸ʢNULLͷ৔߹͋Γʣ
    • 100ສߦ

    View Slide

  49. ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔͷ͔
    • ετϨʔδΤϯδϯ͕100ສ݅શ݅Λ

    ϝϞϦ಺ʢόοϑΝϓʔϧʣ΋͘͠͸
    ετϨʔδ͔ΒಡΈऔΔʢʂʂʂʣ
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ສ݅
    ਏ͍

    View Slide

  50. ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔͷ͔
    • ετϨʔδΤϯδϯ͔Βαʔόʔ΁
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ສ݅
    ਏ͍

    View Slide

  51. ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔͷ͔
    • 100ສߦΛݟ͍ͯͬͯɺWHERE۟ͷ৚
    ݅ʹҾ͔͔ͬΒͳ͍ߦΛࣺͯΔ
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લΧϥϜ͕ʮՃ
    ౻ʯʁ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લΧϥϜ͕
    ʮՃ౻ʯʁ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લΧϥ
    Ϝ͕ʮՃ౻ʯʁ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લ
    ΧϥϜ͕ʮՃ౻ʯʁ໊લΧϥϜ͕ʮՃ౻ʯʁ
    ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લΧϥϜ͕ʮՃ
    ౻ʯʁ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લΧϥϜ͕
    ʮՃ౻ʯʁ໊લΧϥϜ͕ʮՃ౻ʯʁ໊લΧʜ

    View Slide

  52. ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔͷ͔
    • ࢒ͬͨ5݅ΛΫϥΠΞϯτʹฦ
    ͢
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ݅͋Γ·ͨ͠ʂʂʂ
    ΫϥΠΞϯτ

    View Slide

  53. ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔͷ͔
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    Զͨͪ͸ԿͷͨΊʹ
    ຾Γ͔Βݺͼ֮·͞Εͨͷ͔
    ΫϥΠΞϯτ
    ࣺͯΒΕͨ ݅

    View Slide

  54. ΠϯσοΫε͕࢖͑ΔͱͲ͏ͳΔͷ͔
    • ΠϯσοΫεΛݟΔͱ5͚݅ͩಡΈࠐ
    Ί͹ྑ͍͜ͱ͕Θ͔Δ
    • ͜ͷ5݅͸O(log n)Ͱݟ͔ͭΔ
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ໊લΧϥϜ͕ʮՃ౻ʯ

    Ͱ͋Δ͚݅ͩ

    View Slide

  55. ΠϯσοΫε͕࢖͑ΔͱͲ͏ͳΔͷ͔
    • ετϨʔδΤϯδϯ͔Βαʔόʔ΁
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ༨༟ͷ݅

    View Slide

  56. ΠϯσοΫε͕࢖͑ΔͱͲ͏ͳΔͷ͔
    • 5݅ΛΫϥΠΞϯτʹฦ͚ͩ͢
    ͷ؆୯ͳ͓࢓ࣄ
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ݅͋Γ·ͨ͠ʂʂʂ
    ΫϥΠΞϯτ

    View Slide

  57. ΠϯσοΫε͕࢖͑ΔͱͲ͏ͳΔͷ͔
    αʔόʔ
    ετϨʔδΤϯδϯ
    όοϑΝϓʔϧ
    ετϨʔδ
    ฏ࿨ͩ
    ҆຾Ͱ͖Δ
    ΫϥΠΞϯτ
    ಡΈऔΒΕͳ͔ͬͨ ݅

    View Slide

  58. ΠϯσοΫε͕࢖͑ͳ͍ͱͲ͏ͳΔ͔
    • σϞ
    • explainΛݟΔ
    • explain select * from users where name = 'Ճ౻'\G
    • explain select * from slow_users where name = 'Ճ౻'\G

    View Slide

  59. ΠϯσοΫε͸ࠨ͔Βӈ
    • ΠϯσοΫεͷΩʔ͸ࠨ୺͔Β͔͠࢖͑ͳ͍
    • LIKEͰ͸%͕લʹ͋Δͱ࢖͑ͳ͍
    • ࠨ୺͕ෆఆ͔ͩΒ
    • ࠨ୺͔Βݟ͍ͯ͘ͳΒɺ్த·ͰͰ΋OK
    • σϞ
    • select * from users where name like 'ాத%' limit 1\G
    • select * from users where name like '%ాத' limit 1\G

    View Slide

  60. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645

    View Slide

  61. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    ాத%

    View Slide

  62. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    ాத%
    ాதͰ࢝·͍ͬͯΔ෦෼͚ͩݟΔ

    View Slide

  63. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    ాத%

    View Slide

  64. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    ాத%

    View Slide

  65. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    %ాத

    View Slide

  66. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    %ాத

    View Slide

  67. ΠϯσοΫε͸ࠨ͔Βӈ
    ాத ݈ଠ த઒ ᣦࢠ
    ాத ͘͞Β
    68407
    ాத Ұً
    11322
    ాத Ұ࿠
    75891
    ాத ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    %ాத
    จࣈྻࠨଆ(ઌ಄ଆ)͔Βιʔτ͞ΕͯΔ͔Β

    ιʔτ͞Ε͍ͯΔ͜ͱΛੜ͔ͤͳ͍

    View Slide

  68. ෳ߹ΠϯσοΫε
    • ෳ਺ͷΧϥϜΛ·ͱΊͯΠϯσοΫεΛுΔ
    • ΠϯσοΫεͷҰ෦͚ͩΛ࢖͏͜ͱ΋Ͱ͖Δ
    • ͜͜Ͱ΋ࠨ͔Βӈ͕ग़ͯ͘Δ
    • σϞ
    • select count(*) from users where blood_type = 'A' and name like 'ాத%'\G
    • select count(*) from users where blood_type = 'A'\G

    View Slide

  69. ෳ߹ΠϯσοΫε
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645

    View Slide

  70. ෳ߹ΠϯσοΫε: ෳ߹৚݅ʹΑΔݕࡧ
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A, ాத%

    View Slide

  71. ෳ߹ΠϯσοΫε: ෳ߹৚݅ʹΑΔݕࡧ
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A, ాத%

    View Slide

  72. ෳ߹ΠϯσοΫε: ෳ߹৚݅ʹΑΔݕࡧ
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A, ాத%

    View Slide

  73. ෳ߹ΠϯσοΫε: ෳ߹৚݅ʹΑΔݕࡧ
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A, ాத%

    View Slide

  74. ෳ߹ΠϯσοΫε: Ұ෦ͷ৚݅ʹΑΔݕࡧ(OK)
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A

    View Slide

  75. ෳ߹ΠϯσοΫε: Ұ෦ͷ৚݅ʹΑΔݕࡧ(OK)
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A

    View Slide

  76. ෳ߹ΠϯσοΫε: Ұ෦ͷ৚݅ʹΑΔݕࡧ(OK)
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A

    View Slide

  77. ෳ߹ΠϯσοΫε: Ұ෦ͷ৚݅ʹΑΔݕࡧ(OK)
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A

    View Slide

  78. ෳ߹ΠϯσοΫε: Ұ෦ͷ৚݅ʹΑΔݕࡧ(NG)
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    த઒

    View Slide

  79. ෳ߹ΠϯσοΫε: Ұ෦ͷ৚݅ʹΑΔݕࡧ(NG)
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    த઒
    ݂ӷܕ͕༏ઌ͞Εͯιʔτ͞Ε͍ͯΔ͔Β
    ໊લ͚ͩͩͱιʔτ͞Ε͍ͯΔ͜ͱΛੜ͔ͤͳ͍

    View Slide

  80. NOTͷѻ͍
    • Ұக͍ͤͯ͘͞ͷ͕جຊʹͳΔͨΊΠϯσοΫε͕ޮ
    ͔ͳ͍
    • NOT͸Ͱ͖Δ͚ͩॻ͔ͳ͍Α͏ʹ
    • σϞ
    • select * from users where name not like 'Ճ౻%' limit 1\G
    • select * from users where name like 'Ճ౻%' limit 1\G
    • select * from users where name != 'Ճ౻' limit 1\G
    • ͜Ε͸MySQL 5.6Ҏ߱ͩͱ͍͚Δ

    View Slide

  81. NULLͷѻ͍
    • ࣮͸ΠϯσοΫε͕ޮ͘
    • IS NULL
    • IS NOT NULL
    • ͜ͷڍಈ͸MySQL͚ͩͬΆ͍
    • σϞ
    • select count(*) from users where phone_num is null\G
    • select count(*) from slow_users where phone_num is null\G
    • select count(*) from users where phone_num is not null\G
    • select count(*) from slow_users where phone_num is not null\G

    View Slide

  82. ιʔτ
    • ݕࡧ͚ͩͰͳ͘ιʔτʹ΋ΠϯσοΫε͕࢖͑Δ
    • Կ౓΋ग़͖ͯͨΑ͏ʹB+໦ͷϦʔϑ͸ιʔτ͞ΕͯΔ
    • ෳ߹ΠϯσοΫε͸1൪໨ͰߜΓࠐΜͰ2൪໨Ͱιʔτ
    Ͱ͖Δ
    • σϞ
    • select * from users order by order_num limit 1\G
    • select * from slow_users order by order_num limit 1\G
    • select * from users where blood_type = 'B' order by birthday limit 1\G
    • select * from slow_users where blood_type = 'B' order by birthday limit 1\G

    View Slide

  83. ιʔτ
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A

    View Slide

  84. ιʔτ
    A, ాத ݈ଠ B, த઒ ᣦࢠ
    A, ాத ͘͞Β
    68407
    A, ాத Ұً
    11322
    A, த઒ Ұ࿠
    75891
    A, த઒ ಸʑ
    58408
    B, த઒ ঊ
    604143
    B, த઒ ༔ਅ
    547645
    A
    ઌ಄͕AͰ֬ఆ͍ͯ͠Δͱ͍͏͜ͱ͸

    ΩʔશମͰݟͨΒ໊લͰ΋ιʔτ͞Ε͍ͯΔ

    View Slide

  85. ΧόϦϯάΠϯσοΫε
    • ʢηΧϯμϦʣΠϯσοΫεʹ͸ΩʔͷΧϥϜͱओΩʔؚ͕·ΕΔ
    • ΫΤϦதͷSELECTɺWHEREɺORDERͳͲ͕ͦΕΒͷΧϥϜͷΈ
    Ͱߏ੒͞Ε͍ͯΕ͹σʔλຊମͷB+໦ΛݟΔඞཁͳ͍ͷͰ͸ʁ
    • Exactlyʢͦͷͱ͓ΓͰ͍͟͝·͢ʣ
    ͜Εਂ໷ςϯγϣϯͩ
    • σʔλຊମΛݕࡧ͢Δख͕ؒল͔Εͯߴ଎ʹͳΔ
    • ࢥߟఀࢭͨ͠ঢ়ଶͰORMΛ࢖͏ͱৗʹ SELECT * ʹͳΓɺ͜ͷԸܙ
    ͕ड͚ΒΕͳ͘ͳΔ
    • σϞ
    • select count(*) from users where name = 'Ճ౻ ܙ'\G
    • select order_num, name from users order by order_num desc limit 1\G

    View Slide

  86. ΧόϦϯάΠϯσοΫε
    Ճ౻ ݈ଠ த઒ ᣦࢠ
    Ճ౻ ܙ
    13521
    Ճ౻ ܙ
    14491
    Ճ౻ ݈հ
    75891
    த઒ ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    Ճ౻ ܙ

    View Slide

  87. ΧόϦϯάΠϯσοΫε
    Ճ౻ ݈ଠ த઒ ᣦࢠ
    Ճ౻ ܙ
    13521
    Ճ౻ ܙ
    14491
    Ճ౻ ݈հ
    75891
    த઒ ಸʑ
    58408
    த઒ ঊ
    604143
    த઒ ༔ਅ
    547645
    COUNT(*) ʹඞཁͳ৘ใ͸े෼ʹ଍Γ͍ͯΔ
    name ͔ id ͰΧ΢ϯτ͞ΕΔ
    Ճ౻ ܙ

    View Slide

  88. ͬ͘͟Γͨ͠໨࣍
    • MySQLͷΞʔΩςΫνϟ
    • ςʔϒϧ΍ΠϯσοΫεͷσʔλߏ଄
    • ύϑΥʔϚϯεʹؔ܎͢Δ࿩
    • ڍಈʹؔ܎͢Δ࿩

    View Slide

  89. ڍಈʹؔ܎͢Δ࿩
    • τϥϯβΫγϣϯ෼཭Ϩϕϧ
    • σʔλߏ଄ͷ࿩ͱ͸͋·Γؔ࿈ͳ͍

    View Slide

  90. τϥϯβΫγϣϯ෼཭Ϩϕϧ
    • READ UNCOMMITTED
    • READ COMMITTED
    • REPEATABLE READ
    • SERIALIZABLE

    View Slide

  91. READ UNCOMMITTED
    • ίϛοτ͍ͯ͠ͳ͍σʔλ͕ଞͷτϥϯβΫγϣϯ͔
    Βݟ͑Δʢʂʁʣ
    • ී௨͸࢖Θͳ͍

    View Slide

  92. READ COMMITTED
    • ଟ͘ͷDBMSʹ͓͚ΔσϑΥϧτ
    • ଞͷτϥϯβΫγϣϯͰίϛοτ͞Εͨσʔλ͕ݟ͑
    Δ

    View Slide

  93. REPEATABLE READ
    • MySQLͷσϑΥϧτ
    • ࠓͷτϥϯβΫγϣϯͰ͍ͬͨΜಡΈࠐΜͩσʔλ
    ͸ɺଞͷτϥϯβΫγϣϯͰมߋ͕ίϛοτ͞Εͨ
    ޙ΋࠷ॳʹಡΈࠐΜͩͷͱಉ͡಺༰͕ݟ͑Δ

    View Slide

  94. SERIALIZABLE
    • શͯͷಡΈऔΓͰϩοΫΛͱͬͯଞͷτϥϯβΫγϣ
    ϯͱͷڝ߹͕ى͖ͳ͍Α͏ʹ͢Δ
    • ฒྻੑೳ͕ѱ͍
    • ϩοΫऔΓ·͘Δ͔ΒσουϩοΫى͖΍͘͢ͳΔ

    View Slide

  95. REPEATABLE READ஫ҙ
    • ৽ଔ1೥໨ͷ࣌ʹɺ͜ΕΛཧղ͍ͯ͠ͳͯ͘DBͷόά
    ͩͱࢥͬͯ͠·ͬͨ...
    • σϞ
    • A: begin;
    • B: begin;
    • A: select * from users where id = 123456;
    • B: select * from users where id = 123456 for update; -- ͜ͷ࣌఺ͰഉଞϩοΫ
    • B: update users set order_num = order_num + 1 where id = 123456;
    • B: select * from users where id = 123456;
    • A: select * from users where id = 123456; -- ·ͩίϛοτͯ͠ͳ͍͔ΒมΘͬͯͳ͍
    • B: commit;
    • A: select * from users where id = 123456; -- ίϛοτޙ͚ͩͲมΘͬͯͳ͍
    • A: select * from users where id = 123456 for update; -- B͕ίϛοτͨ͠஋ͰऔΕΔ

    View Slide

  96. ·ͱΊ
    • Web։ൃ࣌͸DBΛ͔ͬ͠Γҙࣝ͢Δ
    • MySQL(InnoDB(ͷσϑΥϧτ))ͷΠϯσοΫε͸B+໦
    • ͦͷಛੑΛཧղ্ͨ͠ͰΠϯσοΫεΛߟ͑Δ
    • FOR UPDATEͷ༗ແͰݟ͑Δ஋͕มΘΔͷ͸࢓༷

    View Slide

  97. ͓ܾ·Γͷ
    • த్ɾ৽ଔ໰Θͣ࠾༻ڧԽதͰ͢
    • ڵຯ͋Δํ͸αϙʔλʔζ or @mihyaeru21 ·Ͱ

    View Slide