MYSQL Query Help

MihiCherub

Well-known member
  • Sep 14, 2009
    18,903
    1
    9,707
    113
    Gampaha
    මචන්ල පුලුවන් නම් මේකට හෙල්ප් එකක්

    MYSQL table එකක් තියෙනව 1M Records.
    Code:
    CREATE TABLE `products` (
      `pid` INT(6) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(200) NOT NULL,
      `ptype` VARCHAR(10) NOT NULL,
      PRIMARY KEY (`pid`)
    )
    මේකෙ ptype වර්ග 10ක් විතර තියෙනව. Ex - Inventory, Raw, etc ...

    මේ table එකට select query ලිව්වාම (without limit) type එකක් විතරක් select කරගන්න execution time avg 2.2s.
    Code:
    SELECT * FROM products WHERE ptype = 'Inventory'
    types ගාන වැඩි වෙනකොට execution time එකත් වැඩි වෙනව.
    Code:
    SELECT * FROM products WHERE ptype = 'Inventory' OR ptype = 'Raw'
    execution time avg 3.3s.

    Code:
    SELECT * FROM products WHERE ptype = 'Inventory' OR ptype = 'Raw' OR ptype = 'Service'
    execution time avg 4.6s.

    ඒ නිසා මම ptype එකට index එකක් දැන්ම.
    Code:
    CREATE INDEX PTYPE_INDEX ON products  (ptype)
    දැන් Where clause එකේ ptype දෙකක් හෝ වැඩි ගානක් තිබ්බාම execution time එක පොඩ්ඩක් අඩු උනත් තනි where clause එකේදි time එක ඩබල් වෙනව.
    Code:
    SELECT * FROM products WHERE ptype = 'Inventory'
    execution time avg 4.3s
    .
    මේකට හොදම විසදුමක් පුලුවන් කෙනෙක් කියන්නකො
     

    Barry Allen

    Member
    Oct 15, 2016
    2,855
    139
    0
    Central City
    ptype int කරලා where එකේදී

    Code:
    SELECT * FROM products WHERE ptype = 1

    Code:
    SELECT * FROM products WHERE ptype = 2

    ඔය වගේ බලපන්..මට හිතෙන්නේ අඩු වෙනවා සුවර් :frown:


    ptype ගොඩක් තියෙනවා නම් එකට වෙනම table එකක් ගන්න,simple :P

    ptype_id,ptype_name

    ඔය Slow වෙන්න හේතුව WHERE ptype = 'Inventory' එකේ words එකක්නේ compare වෙන්නේ එකයි..ඕක int උන ගමන් අඩු වෙනවා :yes:
     
    Last edited:
    • Like
    Reactions: MihiCherub

    chirart1

    Well-known member
  • Jul 27, 2009
    3,445
    468
    83
    ube database eka thiyena machine eke performance kohomada ? 1M kiyanne echchara loku ganak neme ne :) int karana ekath hodai :) mokada varchar welawa yanawa kiyala math ahala thiyenawa :)
     

    chint

    Well-known member
  • Oct 3, 2007
    16,249
    414
    83
    cgtech.lk
    ptype int කරලා where එකේදී

    Code:
    SELECT * FROM products WHERE ptype = 1

    Code:
    SELECT * FROM products WHERE ptype = 2

    ඔය වගේ බලපන්..මට හිතෙන්නේ අඩු වෙනවා සුවර් :frown:


    ptype ගොඩක් තියෙනවා නම් එකට වෙනම table එකක් ගන්න,simple :P

    ptype_id,ptype_name

    ඔය Slow වෙන්න හේතුව WHERE ptype = 'Inventory' එකේ words එකක්නේ compare වෙන්නේ එකයි..ඕක int උන ගමන් අඩු වෙනවා :yes:

    This :yes:
     

    Tyrion Lannister

    Well-known member
  • Aug 20, 2012
    3,293
    5,749
    113
    King's Landing
    ptype int කරලා where එකේදී

    Code:
    SELECT * FROM products WHERE ptype = 1

    Code:
    SELECT * FROM products WHERE ptype = 2

    ඔය වගේ බලපන්..මට හිතෙන්නේ අඩු වෙනවා සුවර් :frown:


    ptype ගොඩක් තියෙනවා නම් එකට වෙනම table එකක් ගන්න,simple :P

    ptype_id,ptype_name

    ඔය Slow වෙන්න හේතුව WHERE ptype = 'Inventory' එකේ words එකක්නේ compare වෙන්නේ එකයි..ඕක int උන ගමන් අඩු වෙනවා :yes:

    Yes :yes::yes::yes:
     

    kolavari

    Well-known member
  • Aug 11, 2012
    33,746
    1
    25,655
    113
    කැළෑ පොජ්ජේ
    "EXPLAIN" එකක් දාල බලපන් මචන් ඇයි අන්තිම එක ස්ලෝව් වෙන්නේ කියල..ඉන්ඩෙක්ස් එක පාවිච්චි වෙන්නේ නැතිද දන්නේ නැහැ...අ:baffled: නිත් එක බන් හැම එකටම ඉන්ඩෙක්ස් දැම්ම කියල වැඩක් නැහැ...:no:

    table එකේ මුළු ඩේටා ප්‍රමනානෙන් එක % එකක් තියෙනවා...ඒ ගානට වඩා එක භාවිත වෙලා නැත්තම් ඒකට ඉන්ඩෙක්ස් එකක් දාල වැඩක් නැහැ...:yes: තව ස්ලෝ වෙන්න පුළුවන්..:baffled:

    අනිත් එක වෙනම ටේබල් එකක් ගහන එක හොදයි කොහොමත් ptype එකට..මොකද ptype එක රිපීට් වෙනවනේ..Normal form රූල්ස් වයලේට් වෙනවා නේ එහෙම උනාද? නැද්ද? මන්ද...:P:baffled:

    varchar comparison එකට වඩා ඔතන ෆොරීන් කී එකක් (int) එකක් එක්ක කම්පෙයා කරන එක ෆාස්ට් තමයි මොකද varchar එකකට වඩා අඩු ඉඩක් තමයි int එකකට ඕනේ...ඒ නිසා එක ෆාස්ට් කියල බැලු බැල්මටම තේරෙනවා,,,එත් ඉන්ඩෙක්ස් එකක් දාල නිසා ලොකු වෙනසක් වෙන්න බැහැ...

    Explain කුවරී එකක් අරන් බලපන්..:yes:
     
    Last edited:

    kolavari

    Well-known member
  • Aug 11, 2012
    33,746
    1
    25,655
    113
    කැළෑ පොජ්ජේ
    ptype int කරලා where එකේදී

    Code:
    SELECT * FROM products WHERE ptype = 1
    Code:
    SELECT * FROM products WHERE ptype = 2
    ඔය වගේ බලපන්..මට හිතෙන්නේ අඩු වෙනවා සුවර් :frown:


    ptype ගොඩක් තියෙනවා නම් එකට වෙනම table එකක් ගන්න,simple :P

    ptype_id,ptype_name

    ඔය Slow වෙන්න හේතුව WHERE ptype = 'Inventory' එකේ words එකක්නේ compare වෙන්නේ එකයි..ඕක int උන ගමන් අඩු වෙනවා :yes:

    එත් එතකොට තව අමතරව ජොයින් එකක් ඕනේ වෙනවා..ජොයින් කුවරීස් expensive නැද්ද? :baffled:

    අනික එතකොට මූට දැනට තියෙන කෝඩ් බේස් එක වෙනස් කරන්නත් වෙනවා..:yes:
     
    • Like
    Reactions: MihiCherub

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,903
    1
    9,707
    113
    Gampaha
    එත් එතකොට තව අමතරව ජොයින් එකක් ඕනේ වෙනවා..ජොයින් කුවරීස් expensive නැද්ද?
    දැනට තියෙන ලොකුම අවුල තමා මේක. join query එන එක. මෙතන ටේබල් එක කොහොමත් denormalized තියෙන්නෙ. select query එක fast කරගන්න ඕනෙ නිසා.

    join query එක slow වෙන එකක් නැද්ද?
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,903
    1
    9,707
    113
    Gampaha
    ptype int කරලා where එකේදී

    Code:
    SELECT * FROM products WHERE ptype = 1
    Code:
    SELECT * FROM products WHERE ptype = 2
    ඔය වගේ බලපන්..මට හිතෙන්නේ අඩු වෙනවා සුවර් :frown:


    ptype ගොඩක් තියෙනවා නම් එකට වෙනම table එකක් ගන්න,simple :P

    ptype_id,ptype_name

    ඔය Slow වෙන්න හේතුව WHERE ptype = 'Inventory' එකේ words එකක්නේ compare වෙන්නේ එකයි..ඕක int උන ගමන් අඩු වෙනවා

    join query එක slow වෙන එකක් නැද්ද?


    Bump

    Matath hithena widiyata Int variable ekak dana eka hondai wage bn,


    product table එකට කොහෙන්වත් joins නැති වෙන්න තමා db design කරල තියෙන්නෙ. :baffled:
     

    kolavari

    Well-known member
  • Aug 11, 2012
    33,746
    1
    25,655
    113
    කැළෑ පොජ්ජේ

    types ගාන වැඩි වෙනකොට execution time එකත් වැඩි වෙනව.
    Code:
    SELECT * FROM products WHERE ptype = 'Inventory' OR ptype = 'Raw'
    execution time avg 3.3s.

    Code:
    SELECT * FROM products WHERE ptype = 'Inventory' OR ptype = 'Raw' OR ptype = 'Service'
    execution time avg 4.6s.


    මචන් සාමන්යෙන් නම් OR කන්ඩිෂන් ගොඩක් දානවනම් ඔහොම දාන්න එපා...:no: IN එකක් දාපන්...එක අරකට වඩා ෆාස්ට්..:love: :yes:
    EX:
    Code:
    SELECT * FROM products WHERE ptype IN ( 'Inventory', 'Raw', 'Service');

    ඒ නිසා මම ptype එකට index එකක් දැන්ම.
    Code:
    CREATE INDEX PTYPE_INDEX ON products  (ptype)
    දැන් Where clause එකේ ptype දෙකක් හෝ වැඩි ගානක් තිබ්බාම execution time එක පොඩ්ඩක් අඩු උනත් තනි where clause එකේදි time එක ඩබල් වෙනව.
    Code:
    SELECT * FROM products WHERE ptype = 'Inventory'
    execution time avg 4.3s

    එහෙම වෙන්න පුළුවන් මචන් සමහරවිට Inventory කියන එක යටතේ තියෙන ඩේටා ප්‍රමාණය වැඩි ද දන්නේ නැහැ...:baffled: උබ ඔහොම තනි ptype එකක් where එකට දාල බලපන්...inventory නැතුව වෙන එකක්..එත් ඒ වගේම නම් ඉන්ඩෙක්ස් එකේ අවුලක්..:yes:

    ස්ලෝව් වෙන්න පුළුවන් මොකද ඉන්ඩෙක්ස් වෙනවා කියන්නේ එක වගේ අගයන් තියෙන ඒවා ග්රූප් කරගන්න සීන් එකක් නේ සරලව...:baffled: එතකොට ඕකෙන් ගනිද්දී ස්ලෝව් වෙන්න බැරි නැහැ ඕකෙන් ගොඩක් ඒවා තියෙනවනම්...මේක නම් ෂුවර් නැහැ.නිකන් හිතුන දෙයක්..:rofl:

    මම DB ඇඩ්මින් කෙනෙක් නෙමෙයි...:P එත් ඔයිට වඩා ලොකු ඩේටාබේස් වල වැඩ කරනවා..ලක්ෂ 50 ට වඩා රෙකොර්ඩ්ස් තියෙන ටේබල් තියෙනවා...:yes: 1 million කියන්නේ ලොකු ගානක් නෙමෙයි :baffled:

    ගොඩක් වෙලාවට සර්වර් එකේ පර්ෆොර්මන්ස් එකත් බලපානවා...:nerd: බැරි උනොත් ලොකු සර්වර් එකට මූව් කරපන්...සර්ව එකේ බෆර් පූල් සයිස් එකත් වැඩි කරන්න පුලුවන්නම්...එතකොට රැම් එකෙන් රීඩ් කරන එක ලේසි වෙනවා...:yes::baffled::P
     
    • Like
    Reactions: MihiCherub

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,903
    1
    9,707
    113
    Gampaha
    ube database eka thiyena machine eke performance kohomada ? 1M kiyanne echchara loku ganak neme ne :) int karana ekath hodai :) mokada varchar welawa yanawa kiyala math ahala thiyenawa :)
    මගේ developing machine එකනෙ බන්. :baffled: Heavy programs 4ක් වැඩ. (developing ide, firefox(10+ tabs), reporting tool, mysql, developing program) ඊට අමතරව audio player, video player, pdf 02, excel 03, notepad 02, calc :dull:
     

    kolavari

    Well-known member
  • Aug 11, 2012
    33,746
    1
    25,655
    113
    කැළෑ පොජ්ජේ
    දැනට තියෙන ලොකුම අවුල තමා මේක. join query එන එක. මෙතන ටේබල් එක කොහොමත් denormalized තියෙන්නෙ. select query එක fast කරගන්න ඕනෙ නිසා.

    join query එක slow වෙන එකක් නැද්ද?

    Slow වෙන්නත් පුළුවන්..ෆාස්ට් වෙන්නත් පුළුවන්..:baffled:

    මගේ හිත කියනවා ෆාස්ට් වෙයි කියල,..:P උබේ සර්වර් එක ඒ උනාට කියන්නේ මොකක්ද දන්නේ නැහැ..:rofl: දාල බලන්න බැරිද? :confused:

    මට හිතෙන්නේ ෆාස්ට් වෙයි මොකද අරක පොඩි ටේබල් එකක් නේ...:baffled:
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,903
    1
    9,707
    113
    Gampaha
    "EXPLAIN" එකක් දාල බලපන් මචන් ඇයි අන්තිම එක ස්ලෝව් වෙන්නේ කියල..ඉන්ඩෙක්ස් එක පාවිච්චි වෙන්නේ නැතිද දන්නේ නැහැ...අ:baffled: නිත් එක බන් හැම එකටම ඉන්ඩෙක්ස් දැම්ම කියල වැඩක් නැහැ...:no:

    table එකේ මුළු ඩේටා ප්‍රමනානෙන් එක % එකක් තියෙනවා...ඒ ගානට වඩා එක භාවිත වෙලා නැත්තම් ඒකට ඉන්ඩෙක්ස් එකක් දාල වැඩක් නැහැ...:yes: තව ස්ලෝ වෙන්න පුළුවන්..:baffled:

    අනිත් එක වෙනම ටේබල් එකක් ගහන එක හොදයි කොහොමත් ptype එකට..මොකද ptype එක රිපීට් වෙනවනේ..Normal form රූල්ස් වයලේට් වෙනවා නේ එහෙම උනාද? නැද්ද? මන්ද...:P:baffled:

    varchar comparison එකට වඩා ඔතන ෆොරීන් කී එකක් (int) එකක් එක්ක කම්පෙයා කරන එක ෆාස්ට් තමයි මොකද varchar එකකට වඩා අඩු ඉඩක් තමයි int එකකට ඕනේ...ඒ නිසා එක ෆාස්ට් කියල බැලු බැල්මටම තේරෙනවා,,,එත් ඉන්ඩෙක්ස් එකක් දාල නිසා ලොකු වෙනසක් වෙන්න බැහැ...

    Explain කුවරී එකක් අරන් බලපන්..:yes:
    uMZb54P.jpg


    O3Uo4yM.jpg


    මේ මචන් explain කලාම
     

    The_Killer

    Well-known member
  • Jan 20, 2014
    11,053
    2,200
    113
    WA, Straya 🇦🇺🦘
    www.elakiri.com
    "EXPLAIN" එකක් දාල බලපන් මචන් ඇයි අන්තිම එක ස්ලෝව් වෙන්නේ කියල..ඉන්ඩෙක්ස් එක පාවිච්චි වෙන්නේ නැතිද දන්නේ නැහැ...අ:baffled: නිත් එක බන් හැම එකටම ඉන්ඩෙක්ස් දැම්ම කියල වැඩක් නැහැ...:no:

    table එකේ මුළු ඩේටා ප්‍රමනානෙන් එක % එකක් තියෙනවා...ඒ ගානට වඩා එක භාවිත වෙලා නැත්තම් ඒකට ඉන්ඩෙක්ස් එකක් දාල වැඩක් නැහැ...:yes: තව ස්ලෝ වෙන්න පුළුවන්..:baffled:

    අනිත් එක වෙනම ටේබල් එකක් ගහන එක හොදයි කොහොමත් ptype එකට..මොකද ptype එක රිපීට් වෙනවනේ..Normal form රූල්ස් වයලේට් වෙනවා නේ එහෙම උනාද? නැද්ද? මන්ද...:P:baffled:

    varchar comparison එකට වඩා ඔතන ෆොරීන් කී එකක් (int) එකක් එක්ක කම්පෙයා කරන එක ෆාස්ට් තමයි මොකද varchar එකකට වඩා අඩු ඉඩක් තමයි int එකකට ඕනේ...ඒ නිසා එක ෆාස්ට් කියල බැලු බැල්මටම තේරෙනවා,,,එත් ඉන්ඩෙක්ස් එකක් දාල නිසා ලොකු වෙනසක් වෙන්න බැහැ...

    Explain කුවරී එකක් අරන් බලපන්..:yes:

    How to deal with properly.. :yes: