Хэд хоног залхуурч суусных Блог дээрээ 1 бичлэг оруулчихъя. Шальтай их юм бичихгүй ч хэрэгтэй нэгэндээ, дараа нь надад хэрэгтэй байх гэж бодлоо.
Сая Локал дээрээ 2 хүснэгтээ JOIN - лоод удаад байхаар нь QUERY дуудагдаж байгаа хугацааг нь харлаа.
Эхний хүснэгт 3500, 2 дахь нь 700 өгөгдөлтэй. Эхний хүснэгтийг 2 дахь хүснэгтээр LEFT JOIN хийж байгаа. Дангаар нь дуудахад Query Time: 0.00010 sec мөртлөө JOIN хийхэд 14 sec болтлоо өсөж байна. JOIN муу гэдгийг нь мэддэг ч ийм зүйл дээр арай ингэж өснө гэж бодсонгүй. Сервэр дээр бол хүчин чадал сайтай гайгүй байх л даа. Гэхдээ Дата ихсээд ирэхээр мэдээж нөлөөлөх нь дамжиггүй. Энэ шалтгаанаар 2,3-н туршилт хийлээ.
1. Join Хийхдээ SELECT * гэж бүх баганыг дуудаж байснаа хэрэгтэй 2 баганаа татахаар бичиж үзэв. Хугацаа 14 - өөс 4 sec болтлоо буурлаа бодит амжилт хэхэ. Өмнө нь залхуураад QUERY - гээ дандаа SELECT * - оор хийчдэг байсан одоо бага ч зүйл дээр хэрэг багануудаа бичиж байя гэж шийдлээ.
2. JOIN - ийг аль болох хэрэглэхгүй байх нь зөв юм байна. Хэдийн Хүснэгт олон баганатай болох ч хэрэгтэй мэдээллүүдийг давхардсан ч хамаагүй өөр хүснэгт дээр давхар сануулж байхад гэмгүй юм байна. Ганц баганы утга авахын тулд л 3000 мөртэй хүснэгттэй JOIN хийгдэх ер нь буруу шийдэл байх. Би ингэж бодоод MAPPING хийж байгаа хүснэгт дээрээ мэдээний гарчиг, тайлбар гээд хэрэгтэй багануудыг хадгалж байхаар шийдлээ. Магадгүй Мэдээ шинээр сануулахад бага зэрэг ачааллах байх. Гэхдээ мэдээ нэмэх, мэдээ үзэх 2-ын мэдээ үзэх нь их байлгүй гэж бодлоо.
3. Хүснэгтүүд дээрээ INDEX нэмж үзлээ. Өмнө PRIMARY KEY-с өөр юмгүй байсан бол одоо хайлтад их орж байгаа баганууд дээрээ INDEX нэмчлээ. Хурд мэдэгдэхүйц сайжирч байна. Ер нь Query - ний чинь Where хэсэгт их орж ашиглагдаж байгаа баганууд дээрээ Index өгчихөд гэмгүй. Их өгөгдөлтэй хүснэгтийн хувьд.
За ингээд өгөдлийн сангаа зөв зохион байгуулж зөв ашиглаарай. Ихэнх хурдны асуудал энд байдгым шд ээ. Цаашдаа мэдэж сурсан зүйлсээ хуваалцана аа
Сая Локал дээрээ 2 хүснэгтээ JOIN - лоод удаад байхаар нь QUERY дуудагдаж байгаа хугацааг нь харлаа.
Эхний хүснэгт 3500, 2 дахь нь 700 өгөгдөлтэй. Эхний хүснэгтийг 2 дахь хүснэгтээр LEFT JOIN хийж байгаа. Дангаар нь дуудахад Query Time: 0.00010 sec мөртлөө JOIN хийхэд 14 sec болтлоо өсөж байна. JOIN муу гэдгийг нь мэддэг ч ийм зүйл дээр арай ингэж өснө гэж бодсонгүй. Сервэр дээр бол хүчин чадал сайтай гайгүй байх л даа. Гэхдээ Дата ихсээд ирэхээр мэдээж нөлөөлөх нь дамжиггүй. Энэ шалтгаанаар 2,3-н туршилт хийлээ.
1. Join Хийхдээ SELECT * гэж бүх баганыг дуудаж байснаа хэрэгтэй 2 баганаа татахаар бичиж үзэв. Хугацаа 14 - өөс 4 sec болтлоо буурлаа бодит амжилт хэхэ. Өмнө нь залхуураад QUERY - гээ дандаа SELECT * - оор хийчдэг байсан одоо бага ч зүйл дээр хэрэг багануудаа бичиж байя гэж шийдлээ.
2. JOIN - ийг аль болох хэрэглэхгүй байх нь зөв юм байна. Хэдийн Хүснэгт олон баганатай болох ч хэрэгтэй мэдээллүүдийг давхардсан ч хамаагүй өөр хүснэгт дээр давхар сануулж байхад гэмгүй юм байна. Ганц баганы утга авахын тулд л 3000 мөртэй хүснэгттэй JOIN хийгдэх ер нь буруу шийдэл байх. Би ингэж бодоод MAPPING хийж байгаа хүснэгт дээрээ мэдээний гарчиг, тайлбар гээд хэрэгтэй багануудыг хадгалж байхаар шийдлээ. Магадгүй Мэдээ шинээр сануулахад бага зэрэг ачааллах байх. Гэхдээ мэдээ нэмэх, мэдээ үзэх 2-ын мэдээ үзэх нь их байлгүй гэж бодлоо.
3. Хүснэгтүүд дээрээ INDEX нэмж үзлээ. Өмнө PRIMARY KEY-с өөр юмгүй байсан бол одоо хайлтад их орж байгаа баганууд дээрээ INDEX нэмчлээ. Хурд мэдэгдэхүйц сайжирч байна. Ер нь Query - ний чинь Where хэсэгт их орж ашиглагдаж байгаа баганууд дээрээ Index өгчихөд гэмгүй. Их өгөгдөлтэй хүснэгтийн хувьд.
За ингээд өгөдлийн сангаа зөв зохион байгуулж зөв ашиглаарай. Ихэнх хурдны асуудал энд байдгым шд ээ. Цаашдаа мэдэж сурсан зүйлсээ хуваалцана аа

0 comments:
Post a Comment