通过自关联替代开窗函数实现SQL优化
数据库环境:SQL SERVER 2005
我们平时都是通过开窗析函数来取代自关联,减少表扫描,从而优化SQL。今天,反其道而行,
用自关联改写开窗函数。我们先来看一下SQL。
原SQL语句
SELECT *
FROM ( SELECT MIN(a.line_no) OVER ( PARTITION BY a.id_clerk ) AS line_no ,
a.dslyipt_no ,
a.int_year ,
a.int_period ,
a.id_scheme ,
d.name_scheme ,
a.id_schhelp ,
e.name_schhelp ,
a.id_dept ,
b.name_dept ,
a.id_clerk ,
c.name_clerk ,
a.id_slyitem ,
a.name_slyitem ,
a.dec_value
FROM dslyipt_03 a ,
ctlm1003 b ,
ctlm1007 c ,
ctlm7201 d ,
ctlm7219 e
WHERE a.id_dept = b.id_dept
AND a.id_clerk = c.id_clerk
AND a.id_scheme = d.id_scheme
AND a.id_schhelp = e.id_schhelp
AND a.id_scheme = e.id_scheme
) dslyipt_03
WHERE dslyipt_no IN ( '' )
------------------------相关表的数据量----------------------------------------
SELECT COUNT(*) FROM dslyipt_03 --
SELECT COUNT(*) FROM dslyipt_03 WHERE dslyipt_no IN ( '' )--
SELECT COUNT(*) FROM ctlm1003 --
SELECT COUNT(*) FROM ctlm1007 --
SELECT COUNT(*) FROM ctlm7201 --
SELECT COUNT(*) FROM ctlm7219 --
dslyipt_03表是大表,有2321920条数据,过滤之后只有16条数据,原SQL总共执行了30多秒才出结果,
因此可以判定,SQL还有优化的余地。
对2KW的表进行开窗,慢是有原因的。那么,我们是否可以先过滤再开窗呢?我们来改一下SQL,改写之后
的SQL如下:
SELECT MIN(a.line_no) OVER ( PARTITION BY a.id_clerk ) AS line_no ,
a.dslyipt_no ,
a.int_year ,
a.int_period ,
a.id_scheme ,
d.name_scheme ,
a.id_schhelp ,
e.name_schhelp ,
a.id_dept ,
b.name_dept ,
a.id_clerk ,
c.name_clerk ,
a.id_slyitem ,
a.name_slyitem ,
a.dec_value
FROM dslyipt_03 a ,
ctlm1003 b ,
ctlm1007 c ,
ctlm7201 d ,
ctlm7219 e
WHERE a.id_dept = b.id_dept
AND a.id_clerk = c.id_clerk
AND a.id_scheme = d.id_scheme
AND a.id_schhelp = e.id_schhelp
AND a.id_scheme = e.id_scheme
AND a.dslyipt_no IN ( '' )
嗖的一下,数据就出来了!但是,再核对一下数据,发现字段line_no的数据对不上,说明改错了。改写
后对line_no开窗的范围变小了,所以数据有问题。
现在通过自关联来实现开窗函数的功能,自关联改写的SQL如下:
SELECT f.line_no ,
a.dslyipt_no ,
a.int_year ,
a.int_period ,
a.id_scheme ,
d.name_scheme ,
a.id_schhelp ,
e.name_schhelp ,
a.id_dept ,
b.name_dept ,
a.id_clerk ,
c.name_clerk ,
a.id_slyitem ,
a.name_slyitem ,
a.dec_value
FROM dslyipt_03 a ,
ctlm1003 b ,
ctlm1007 c ,
ctlm7201 d ,
ctlm7219 e ,
( SELECT a.id_clerk ,
MIN(a.line_no) AS line_no
FROM dslyipt_03 a
GROUP BY a.id_clerk
) f
WHERE a.id_dept = b.id_dept
AND a.id_clerk = c.id_clerk
AND a.id_scheme = d.id_scheme
AND a.id_schhelp = e.id_schhelp
AND a.id_scheme = e.id_scheme
AND a.id_clerk = f.id_clerk
AND a.dslyipt_no IN ( '' )
OPTION(HASH JOIN)
在语句后面,我们通过查询提示,建议SQL走哈希连接,1S之内就出结果了,经核对,数据无误!
我们来对比一下改写前后TIME、IO
改写前
改写后
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6QAAADeCAIAAACljFqwAAAgAElEQVR4nO2dv67cOLL/BdwX+OX3RQZKZx9g8h1sKIwfYCa6kTeehWIbC9xsHNzQ6HTnAewHMDo/8Rqb2ecc/gJ1SxTrD4sU2fr3/aBhd7OpYrGqWKpm67Sa//znP//5z3/+93//99///vf//d//OQAAAAAAAI5Cg2I3iaZp2OdSn6CdfUtq12VKonQ5FoxjAQAAAABsHxS7aaQWu40H7WYpc5Wx9MaGY+FYrEyUwgAAAADYLCh2E8jYXk3aspWKyOCJXm4anyt1auqeMYpdAAAAAGwWFLsJRItdWoCmFrvsW7TYjSoWvKVL1vdrk6YAAAAAALAplhe7l+5WGrVt2/ZX55xz1769Nw4tU0PTdJcsmWsjlXR66akcFa2MaSVqGTFJQ8smrt85rxoGAAAAAFiLpcVu396L12vf3krbS9f4Ve9YrV66ts+VuTJJ1WRQ7Eo1ItvZIlaSqcgP2rOLXUs7AAAAAMB2WF7skmL00s2arn13e2kvdrkCd9zt9crfvm2apu3721vd5d6r7acjhkFth7PQHVZld1PZ9aRFoVSD6sfqxWWgCTucor+ihqX9erPpBj6gAAAAAAAUuIzBu0BhKBavfTurGqfX1mKXynTXabfXXfvWk3PpwjLVK7bvI6YcrqPUo2PLWFA6W7GbunWq1NzSKFILe6Cihl7oAwAAAABsjYJ/oHbpmu5Ci92p9vSK3WD3NybT25cdmI5mJN018MvshMNV9GJXL3CVzvRAvzGoL/UDg+d6QZxa7FraAQAAAAC2w7Ji198xde5eW94r1LCDrdhlZc63Y31YScNRU9WdeLiCXuzSRmOxmyTcXuxGW6L6K51R7AIAAABg+ywvdvn90qBt3nHe2SZz3nyvgJuwzVfAHyLtcMlYtp9BsBS70t5qgKSG0rNJuXwiqn+gKjuo3x/X7AIAAABgU1T6nd17tdv2/j7vrrHUhUGjVDVKjXr/sb6U/qXdpLJY0tCudlIHAAAAAIC1qFPsXrrmfv3uMbb5lE1WpTG12JWGUPZujfu4+hB6fxS7AAAAANgvuINaHKlI1StgY9GZUSlKO77G/npPKk05XLkWAgAAAABgC6DYBQAAAAAAh+Vcxe7yr/gfjEU99iKHxwxdfAi4AwAAAABlOXux67yrDqQ/53qwhjq0J5VQSpNSqiYNAXcAAAAAoCBHK3b1wsjeGH1rI6xb7EZfwh3b1xkAAAA4Ngcsdv0n+oZcaj33MOybmsHmYvBvcR3ocPpLuKOUOwAAAACQx9rF7nRnh7bvh7uZze/t212cc/dObX/1fsGXQ6+cpPosu/yyc5+C6TeH6bhUc6owW19mk1p6Wopdo4T67hiiyPr7z1twBwAAAADyWLfYvXTjr/D6P8l7nW70e78lhXerYf8+wITs6souJINr396mpt5ig9ZMLKyqbo1iN6rnNt0xOEGJonG47bgDAAAAAHmsWuxeOv6GE16xe++TUOwGVQitP+jLjOpqvv/cNI22URjMR+pmqYeC6VBVSxVVlmI3+nKb7hiwFLu6BPdAdwAAAAAgjzWL3Wm/k75xr0PuTxft7FqqKHa7rlSlMit2E++eLG0i+m8FjS5Xc2oHffToy226YyBa7LI80h0AAAAAWM5Wd3bHwuFW41Yvdi3tc91JRbZ4Z9fJdR7b03G11MJi1/6WXhkvLHYt7T41dnbZOSo9XYo7dGkAAAAAKMVmrtn1X1yZOmTaBb72reFKALaSKFhdJXHtu0n5lP1EpcxSilqpMTqd1GI3+nKb7hjI2Nkt5Y5KMwIAAAAAZTu/xjBuxXmbdH414v9uA7cdPKBvwilVFLuBV6wWsSnPKiP1UTTcVLG7QXd4MddEd4BruKN8gAEAAABAYO1itzRJZceS4u8xRCutaA1qfCv1WGPtC3co9fHq0wEAAADOwNGKXZ3tV1fSpqakkn1GlrnQ0SVNUhWzqHQqdwAAAADgMZyl2DVWbHr/VbAXnQsrXbsEXZrFdCd3BwAAAAAexlmKXQAAAAAAcEJQ7AIAAAAAgMOCYhcAAAAAABwWFLsAAAAAAOCwoNgFAAAAAACHBcUuAAAAAAA4LCh2AQAAAADAYUGxCwAAAAAADguKXQAAAAAAcFhQ7AIAAAAAgMOCYhcAAAAAABwWFLsAAAAAAOCwoNgFAAAAAACHBcUuAAAAAAA4LCh2AQAAAADAYUGxCwAAAAAADst2i92mabIPHGEb6bvR4bKVAQAAAAAAK7LRYlevU5W3pKqUtgdy7PoAAAAAAIC9sMViN6myHDvrO7VKWSxVz3n6AAAAAACA7bC5YlcqXpMO0fdx/RapRB7ftW8eAwAAAACArVGs2L10bX/1XjVN03QX0q1vb/Ui816gmeHSAgtKZzocLXY1xa59G50GAAAAAABYj0LF7rzsu3RNd3GkErx0TeNXxJpaapGqVKKSHKXFb08rdsMSHwAAAAAAbIsyxS67xRm02bdBpUsF2L3YqCin7gEHothiVyuysbkLAAAAALBhyhS77AYnKXa7rrtdxKBshxq3VP3G6CUKOn5nqdiVdbt0bW8fCwAAAAAAPJLHFbvDRQz3tyLf/tuLXbadbbFcC4FiFwAAAADgSDzuMgZ37dt7XXjtu4LFrhN2Z/Vj2TKXLYW1YheXMQAAAAAAbJgqf6A2/uRC0zT+7y5cxzdiu6Gpxa7jt11n7+qXOih1rbIZjD9QAwAAAADYMpV+emyxWunFrqVDquRIZ2zrAgAAAABsm83dVGIg4zIGfxdWOVZ5slwNAAAAAACwKfZR7EoXHrDt9C2/rg2u7rVcGqGrAQAAAAAANstGi10AAAAAAACWU7jYxa5nEnZzBRvSkoSMyz+yVVpC0ijGztu/5qSgMkoMLJRWUGxBHqzMWgbZlM19sGA3CJLA7kBiWREUu2tSvNhNbUm6grks9JcuAqi2bH8qM9qiSCiL5aPIcskWsbqFWSEHMx3V3B51pXRgtao9RCkUoymmO3nUVUUPV7Y/3FEcag376pBaimhVe4jdsbTYZf36mJVwABr1rMCukKidjWtpXJZUjQITMxAMLb2keYQKoS/txmQ7F58mq+0SgXrkBI2OTJkqcwbTSdJY4UaDlFWmrOSysIGkx4OLmfpUUVcQalvWJpIv6BPaDndkoEd70Kgbuawy2zfdA8DO7jpYQpxNJS49iGkfZZlVWnhR3RpzOk7KDtF0Q7tVzTjLsxtrKPpvMHrUsLrmFoEWmUnUNh0dxa5PQYpPsypYsAXHygZJYMvu8BvthxdnF6Z7JAWKXdaOCda8dI1/54kULt0wTvToe8eg+9g8u8nF0BrIHLvO2xco72JRXiqDSMdSN9mToGClHN304MmYuEWmMkp8RD5s4loZG6NyJP0bknPZKVO/S8LLm26640xC5JQyHT1quUEkVpymMSv2bVoAj/pEI6SGzP1GXQ13KJZvkARUKq2O5gSJZe9sYGf32reN4YYU8h0cDLd2uHRj4E5yLl0zPRs1GFoDmbOu/jtG5QV0c6UmLP+lJWE5khnZ5MXCWskIu6qVBanPPZivIlCZpn7gHD5soij6JBHYhDZKYaM8eZTphluGX50j60iliOmUVRA8TzIIy4rTHEnLiio7X7BHc4cjdqaNSAI6NVbHSRLLfllU7Eq5jHW/DPGbd1vhrmu7S7gzG1QYXuBeuqZp2rZtmqbtBylBZ75mvlyCNrHYDd9KCToCm7OCd4PneqJhpRnTlpQrFZbcQS6YnZQygkZ9suxLeqBuw4REQMJGIlO+LEeZzvgvazdj2FQy3Wypms8ldvlGaZLFpHH1npTVp+no2vRS6P2NS9f23rcUkY9t+12wB3MHkoDlELMON0WKrI4zJJb9UnJn1+iwGN5+2bVvx+Az7uzet1pvUsKjuBC5dPRLATKYX24XuzGycp7w3/J7piYstkVpT3JikWJXSab0pWIiKpOVFggJuiVELxc2FLs7kggix38inZa2YLr559KI9WqYjp01q7/RICyrT9MxWdFXachgs2uw/B66nrtbsId0h0MSWEC91eG/PGRi2S/Fit0lLpwhFbX2Yre7uKGqvZKjbq0zqWzJopRxlgqP5hG2Q7QP7WlPWHqLJMGes1yJYtcytBJRyks2IJW3kiYuhQ2lRsYJ4kF6kjT6Y0yXtDNRyXT0pX5OcqpBWFafpgvW5jzv+TnSCX0kPfe4YI/qDiSBbCqtjuDljhILLSSOR5lid0nBRBA+slz7dvAuuUzWXuwGEatchC6VcVfDJ257BOsd9FUhjZKR2soWu8Zlw/aRGkeZDYEeTvsEnf0nbLuO/W8XJF8oHomGhJRGi5znapvu2nfTlzbqOipuOlasZExnNgjL6tN0QlYcuKfB2XcTqXtXeqMfqIrdThJ1rqg7fNsGurGWkSbFSnZwR4nVITnImY3MUsl0qR7cKWV+jcEJHs1E+O2E8Ure6cKGWZC0/XX6U8vblxDXvp00mX8Ymh8+VsFzodOfIo39jAaxGEHv0KhZTBqFukOKb12CDmslKlmBDsquz6BdV1Va4axMOqIpaIWwYZH0kQYymo5KkEw0Cmw4LKpS9fJN52aX4+vXAlUynbJYMgwisuI0mazoXJBTb9sBTdO2XdDPrCqrCY0N3arHj7pq7qBaSWYflWw4LNOnU4Y7dFV9PTOMbNC/pOnGxgRNdkiBP1Abnzt5vZ2N+Kq7dzO+S8NRCtCkHMTqudxxSXOP2kqyA0249KWuD+1cMGh1w1pUMgqX8qye12j7GUxnPwekGiSDqhFSHCxY41EPA0nActRj2HtiiS7qA1Dymt2oX0EAeyaQzgpKT1am0uKLcqVzluXYpFGU86Uy96hZnJBoSkVshl/sQyspUhdiP2/ph+zUdHkBYzFIBlUjpCxYsMaWR4IkEG15GHtPLGeg/B+oAQtsnUr70J4Zgcsewq6H5TnLXun6mrBYZFqyttJTOoUXD+aMs0uGQCmiLEZWJB/DdNG4WhhLCykeIQXBgmXb13KHrgCSwIM5QGI5CYVvKgEAAAAAAMB22MAd1E6M3VzSB0fLh8ikjZbHeDBpFGPn1Lk/noLKlN3SOJXpsod7gA6bsrkPFuwGQRLYHUgsK4Jid02KF7upLcqT2oxfgUW/XAueK9/BGece/RavFMbvsxZKtojVLcwKOZjpqOb2qCulA6tV7SFKoRhNMd3Jo64qeriy/eGO4lBr2FeH1FJEq9pD7I6lxS7r18eshAPQqGcFdoVE7WxcS+OypGoUmJiBYGjpJc0jVAh9aTcm27n4NFltlwjUIydodGTKVJkzmE6Sxgo3GqSsMmUll4UNJD0eXMzUp4q6glDbsjaRfEGf0Ha4IwM92oNG3chlldm+6R4AdnbXwRLibCpx6UFM+yjLrNLCi+rWmNNxUnaIphvarWrGWZ7dWEPRf4PRo4bVNbcItMhMorbp6Ch2fQpSfJpVwYItOFY2SAJbdoffaD+8OLsw3SMpc1MJCdPxs3tQpzHdQ8LYMeg+Ns9vFXH/4eb5jYbZgRYo72JRXiqDSMdSN9mToGiQdN304MmYuEWmMoplRC5C4loZG6NyJP0bknPZKVO/S8IPZjp61HKDSKw4TWNWtN8IMNAnGiE1ZO436mq4Q7F8gySgUml1NCdILHtnAzu75Pa/YjfBv5Eb5zk3u3faJGe6L/GlmzS49u10W5W74OEpM5BReQHdXKkJy39pSViOZEY2ebGIBjHArmplQepzD+arCFSmqR8YMLlcuLM1i6JPEoFNaKMUNsqTh5mOXVxRiphOWQXB8ySDsKw4zZG0rKiy9wV7MHc4YmfaiCSgU2N1nCSx7JcCd1CLEhND/ObdE6/r2u4S7swG1aUXuJeuaZq2bZumaftBStCZr5kvl7FtJi3c8aWHpgQdgc1ZwbvBcz3RsNKMaUvKlQp5xS7VSooZ2qhPln1JD9RtmJAIzM7PlC/LUaYz/svazRg2lUynLC6JUqbzJUgWk8bVe1JWn6aja9NLodNH+Lb3vtxKuCHqvhbswdyBJGA5xKzDTZEiq+MMiWW/lNzZNToshrfNeu3bMfiMO7v3rdablPAoLkQunf+lwLx0nh28pLZjUc4T/lt+z9SExbYo7UlOLFLsKsmUvlRMRGWy0gIhQTfjxO8fx+LTt7sjiSBy/CfSaWkLplMWFzvHaEsq9jON0SAsq0/TMVnRV2lIsLNrsPweup67W7CHdIdDElhAvdXhvzxkYtkv5e+gluHCGVJRay92u4sbqtorOerWOpPaiBWtZWeXh+YRtkO0D+1pT1h6iyTBnrNciWLXMrQSUcpLNiCVt5ImfuPSRa/rqpFxgniQniSN/hjTJe1MVDIdfamfk5xqEJbVp+mCtTnPe36OdEIfSc89LtijugNJIJtKqyN4uaPEQguJ41Gm2F1SMBGEjyzXvh28Sy6TtRe7QcSyF6Ff+27aV54rYqzt7BGsd9BXhTRKRmorW+walw3bR2ocZTYEejjtE3T2n7DtGv42wDXygV/yheKRaEhIabTIea6u6dTFFdVzoelYsZIxndkgLKtP0wlZceCeBmdfaaXuXemNfqAqdjtJ1Lmi7vBtG+jGWkaaFCvZwR0lVofkIGc2Mksl06V6cKeU+TUGJ3g0E+G3E8YreacLG2ZB0vbX6U8tb19CXPt20mT+YWh++FQFe1cMj23zkaxfH0SNoHdo1CwmjULdIcW3LkFHMYgx49BB2fUZtOuqSiuclUlHtAbtFJ+RS7kkfaSBjKajEiQTjQIbDouqVL1FpuMWF0sl0ymLJcMgIitOk8mKzgU59bYd0DRtaw3lXS/YI7qDaiWZfVSy4bBMn04Z7tBV9fXMMLJB/5KmGxsTNNkhYrH7/Ycf8MADDzzwwGOVB3O6IvVcwdOzXoUoBVYpBVJR1POrW/3AoJ2VaZn7yd1hLy5TjVxQGWWg+OeE/YNiFw888MADj809mNMVVxmUOknnbXMWGToPpU7SFbMXr/ohcIc0tNGSmVvjC5QpO9C+QLGLBx544IHH5h7M6UreLSt8XkwvBx9P0hZdI2ORrHQ7uTuoGY0l7GNq0K1tga9IvNhdUTkAAACnAqceAEBxChe7J/y48BjshpU+YiZ9LWV56zG+ThrF2Dl17seg0jVhy8Vu3x0PVmb7BmEppWHxYvecOWRTylCQQ3bHWkYudnUHit1dULzYTW1RntRm/LIs+jVc8Fz5ts449+j3fVvG+G3aQskWsbrXWCHruqO46ajm9kgupUNxKgVYjZ1dxeaK5U8etFXRo53tD3cUh1rDvjqkliJa1RhiabHLmuYxwXQqGjUFs+EY9YgxcMc1QNUoMDEDwdDSS7poqRD60m5MtnP52RaluL/YMGCNz/qCPqHtG3FHcdNJ0ljhRoOsTg0rVS129ZdS3Prd6MszBG1BqG1Zm0i+oE9oO9yRgR7tQaNu5LLKlJKMnd2tY4kndt269IihfZSYrhTlUd0ac+5LWorRtU27bT/aA22XpyfW+PTfYPSos3TNLQItMpOobTo6il2f7VDcSq7mNbuHzyE13FEc5JAtu8NvtB9enBqmK1DssqokKDS7B7XxHb9DpM9E7H5XGdx/4jm44TCnVXQyKroxSy1X6VjqUHvGGQhvCJKlmx5mGRO3yFRGiY84/lj5/M6TTKNzjlqJ6SnccMUwU2NjVI5kk4YkTdaMwbGK8PLukNZmbMrGxlRRyw0iMARJOEc6d+8n9smtJVey0qVrLKce9uaXUSwBVkPmfoPWeIZNcodi+QY5RKWGO6gmy42sKbaS6VyRYnepEuT2vz6WO/Qa7+KboI+5eJ5uwHI/ZJpMcNtjdZpRdMOmZgf/pSU7OJKG2EwhcOlsNwRi50WXkBL9+tyD+SoClWnqB86ZIuDSjRZgGx1nJeHwMYuZA5VVNTNfyNsA9C2LGR/oDn7BRiliOmVlBc+TDMIyTC4IDnbubAStaKUB26lnfjtMVbE955D13eFMZ1irOxyxM21EDtEp6I5H5qXVTbeo2JXSAWtBmXDqV2+Da/Kr19rOnT33/fDhp+2v01PHfSQaPv14e2f0voGREs0bl4utcFopHiawCSJ4N3iur2pWmjFH+MpYssPCzyLB7KT1GTTqk2Vf0gN1GyasusuFsYHXGLESd7jdsJk6y3IUE43/sr4whmIld0QWLEcp0/kSJItJ4+o9JXoxSU5zZ0NodSsxpx4vLd+Vu3Q0e5s13FEOWd0djlZXC9yBHGI5xKzDTZEiq6N2XlrddCV3dpNyscilG3fg/W/+L52/tzVzHvX92CHoy5TF3o7s7am5iJg5j/lysOR+s5KU/bf8nqnZgW1R2o3uvvZd17XGVaePrmQu+lIxEZXJSguEBN0S4vzSMcEwb9SsxB5uyxd2FycRRKP/RDqvbMEd0oKV5hhtSYWdNau/0SAKWrHrpbrRnmPUrW6l8NQzu/xs/JJDyN4xPXeXQ1Z3hwtiqYQ7HHLIAoq74zF5aXXTFSt2l2fngaDUnF55H18ixe7YQsrWsNidX0l5E5tX7LI7u7ZyRLcSu7BpH9rTnh30FkmCMUEMX88Pz8fvMZKQMqCuvz5ZKZ9KAvMyo7vVE2E80UbJSuzhwwEWU1ZJGfMYk54kjf4YdyRtLVQyHX2pn1ScahAFy84u2391K4Wnnnmo39OzkL1VPfeYQ1Z3hwtiqZA7kEOyqeEO+rJ4XqpnOlrb8N2KFLt5ZRCPXyPye1pKHp+EtP2Vupju7I6vZzu7gwKxq2yvfXd7d6yP/Y9Zhr+Hs4eL3kEPQWmUjDyS4+XRnr7F7hJMMcr1kRpHmQ2BHk77BJ39J2y7DvuHAvxfD3BWUv7OwFLrSv5VvBwNMykPFjlR1XYHs2DlmUoaSv0zIlkypjMbRIFcs0vn7l807m/3rmwlZmeXObkL2dusqtLox7li9pMEraNbiQvc4ds20I21jDQpVrKDO0qsDslBzmxklkqms3uwzK8x0JGMbmPxvlzr2tv5fnYt7bQFO7Mz+YPi0aB8z0vXth13sPWnAyaxwR8aMfqwJPipWrHLHht00yVE8e0kSVagg7KLIWjXVZWWEyuTjmia+Dzq2KANPpTPrCT3XHgNg6S80R1UgmT2UWDDYVGVqpfvDicsWI5KpmPVZiVbDCIxT3b0bx68ufupllyGtYKVrn3bTL/GwP8lxW3nqmmE7G1RldWEhpbulOMHrXCGXe4OqpVk9lHJhsMyfTpluENX1dczw8gG/UuabmyMalLgD9QkbRKsUAHDN+YJf0Baj3iI37sZ36W+l6IhacGzei53cdLco7aS7ECzG32p60M7rxveUXRnWaZpFC4lSj0x0fbtuKOe6exJPNUgj6eelerdVMIdN4dUXe81QA6xHPUYNpWXMkwXXdS3bgWv2Y2a5jFwmxVat/zfA3sgbNqVUrDSk5WptPiiXOkEYQrQlFHYubNjRVOtIjlJ/7XI8LV9OkqO04XYTzz6IVXdUc90eUFoMcjjqWel4sXuGXJI1fVeA+SQaMvD2FReyq5S4pKL/4Ha8Zh/d9A0Tc7vmWcTJFypD+2ZESXsIWzwLU8QlqOCUSQsMi0pUukpnS93EfYZp4cMgVKUWhynSF7XHaVMF43VhfG5LmUDrGyxe8IcUny91wA5ZAvu2Hheso9uklb2phIAAABANjj1AACKEy928cADDzzwwOPBj+kstfY2pM+mlKGU3S80bp2uyKaUyWMtIx/AdEmg2MUDDzzwwGNzj+ksJVxepX+dXewcWefaxEqkFrvRawMsX1jDHQHUGrqdV7kqYJumqweKXTzwwAMPPDb3MNYHUjFR8jS5gcsro4x28Fv0qssRMzq5JII78rCUmEYjl1Vm+6Yri1jsZoo7mfnKYglxNpW49CCmfZRlVmnhRXVrzOk4KTtE0w3tVjXjLM9urKHov8HoUcPqmlsEWmQmUdt0dBS7PgUpPs2qYMEWHCsbJIEtu8NvtB9enF2YrhIFil3WZAmGm93G2d1+Cbm7jD+WnPjTYHNxiUj3rLp4alVWIRLlpTKIdCz1nT0JuukH3bJnP9NBiqiMiVtkKqNUmjsrdvnsfDkNybnslKnfJeEHMx09arlBJFacpjGDKTftU7BESA2Z+426Gu5QLN8gCahUWh3NCRLLjtjAzu78rrzBneQi95WTBNKDYneou6PdacKqTOw+wzq6DVMTlv/SkrAcyYxs8mK5jnfymG4+mjBruqqVBanPPZivIlCZpn5gQN7cFX2SCGxCG6WwUZ6cwXTKKgieJxmEZd0IGTBkMOutdrBgjQMpFHSHI3amjUgCOjVWx0kSyy5YVOxKaYv1tMzcRcPdne/3dp7iz7spnn/T56Zp+37+uWyoa/194dkN9bw6dGofRV66th+bg4o1XAzinYHTaz0Pmpjou8FzPdGw0oxpy1cm6krPPpl3pwtmJ6WMoFGfLPuSHqjbsMbck+Rb5CjTGf9l7WYMm+OZzpcgWUwaV+9JWX2aTstgzZRn5QQY1RALNomC7kASsBxi1uGmSJHVcYbEsgtK7uwafRPh2nf99dK1XTf83w+NrV+PhvXqPEbHYtdvZnd2Lxcvhq9Unj+qCxaDr9K1b8vdZkI5T/hv+T1TExbborTnrLqscp/NC6xi1A6siahMVlogJOhmCemkudvdkUQQOf4T6bQE01EJypnGaBCW1afplAw2JVUtASp6YsFmUNwdDklgAfVWh//ykIllFxQrdpd4a8a1b7tL3/Xu0rV93w2+m4rRscvt+fyd+9tNw1fAbMemaaZPafPPRnPpMxHz3WLLpcU0j7Adon1oT3vC0lskCcacVWpn1zK0EmbKSzZKlbcyk3Vs7jUyThAP0pOk0c9jOvpSPyc51SAsq0/TkQzGJVUtAUp6YsHmUcMdSALZVFodwcsdJRZaSOyaMsVuXm0kcOnath3+QO32JCxV/Rjji91hZ9d3/Lj5Ol5Q62/Hznd2/csktJ3drGvVo33iVGEAACAASURBVGbRO+irQholI7VlOPTadzcrko8WxmXD9pEaR5kNgR5O+wSd/Sdsu44y9+h0dPNGTefbwcUiRFFAUvXApmPFSsZ0ZoOwrD5NRzMYk1S1BGhRVWn0A1Wx20mizhV1h2/bQDfWMtKkWMkO7iixOiQHObORWSqZLtWD26fMrzE4wXl5jDHkX68w20gdK+CGNI5fNJA/sBx7+5v+gYBL1zRtG16KGwzEN1u/PohaRu/QqFlMGoX6SIpvXUKEySLhJ5DoipUGZddn0K6rKq1wViYd0RrJ8twtoysDGU1HJUgmGgU2HBZVqXq7Np2yWDIMIrLiNIUMRpMqnwDNqrKa0NjQrXr8qKvmDqqVZPZRyYbDMn06ZbhDV9XXM8PIBv1Lmm5sTNBk2xT4A7XxuZOXFnC5p17lXRqOUoAm5SBWz+XeTJp71FaSHWjCpS91fWjngpGsG9aiklG4lGf1vEbbz2A6+zkg1SAZVI2Q4mDBGo96GEgClqMew94TS3RR74uS1+xGXQgssGcC6ayg9GRlKi2+KFc6Z1mOTRpFOV8qc4+axQmJplQYZ/jFPrSSInUh9vOWfshOTZcXMBaDZFA1QsqCBWtseSRIAtGWh7H3xHIwyv+BGsiGrVNpH9ozI3DZQ9j1sDxn2StdXxMWi0xL1lZ6Sqfw4hGecXbJEChFlMXIiuRjmC4aVwtjaSHFI6QgWLBs+1ru0BVAEngwB0gsx6PwTSUAAAAAAADYDhu4g9qJsZtL+oxo+byYtKfyGA8mjWLsnDr3x1NQmbK7F6cyXfZwD9BhUzb3wYLdIEgCuwOJZUVQ7K5J8WI3tUV5Upvx267o92jBc+XrNuPco1/YlcL41dVCyRaxuoVZIQczHdXcHnWldGC1qj1EKRSjKaY7edRVRQ9Xtj/cURxqDfvqkFqKaFV7iN2xtNhl/fqYlXAAGvWswK6QqJ2Na2lcllSNAhMzEAwtvaR5hAqhL+3GZDsXnyar7RKBeuQEjY5MmSpzBtNJ0ljhRoOUVaas5LKwgaTHg4uZ+lRRVxBqW9Ymki/oE9oOd2SgR3vQqBu5rDLbN90DwM7uOlhCnE0lLj2IaR9lmVVaeFHdGnM6TsoO0XRDu1XNOMuzG2so+m8wetSwuuYWgRaZSdQ2HR3Frk9Bik+zKliwBcfKBklgy+7wG+2HF2cXpnskZW4qIWE6fna76TTIjSOifcOe959jnrXbG5co72JRXiqDSMdSN9mToGTPDN304MmYuEWmMkp0RO83yC2/8q6JXT47X05Dci47Zep3SXhx0zlpHcWmbGxMFbXcIBIrTtOYFfu2adLv6W2JkBoy9xt1NdyhWL5BElCptDqaEySWvbOBnd3x/r3RboJ/I/fIc845d+ma7hL2vPbtdLOU+zts46Si15igvIBurtSE5b+0JCxHMiObvFhYexphV7WyIPW5B/NVBCrT1A8MiN2UkUfRJ0MOaz36lmXKDzYdv45UiphOWQXB8ySDsKw4zRFDkF462+n8AAv2SO5wxM60EUlAp8bqOEli2S8F7qAWJSaG+M27/V3Xtd0lvLFvUF16gXvpmqZp27ZpmrYfpPidgxCfHXiPbLZRVjYl6AhszgreDZ7riYaVZkxbUq5UyCt2qVZSzNBGfbLsS3qgbsPo3DOK3ST5FjnKdMZ/WbsZw6aS6SKLi6OU6XwJksWkcfWelNWn6eja9FLo/Y1L1/Zjc9K9T/e1YA/mDiQByyFmHW6KFFkdZ0gs+6Xkzq7RYTEu3Rha174dg8+4s3vfar1JmR+lFbv3cdhGN1XgS7+491HOE/5bfs/UhMW2KO1JTixS7CrJlL5UTERlstICIUE3y8T9W6mn3h7dOESUIHL8J9JpaQumkxaXNMdoSyrsrFn9jQZhWX2ajsmKvkpD2M6uwfJ76HrubsEe0h0OSWAB9VaH//KQiWW/lL+DWoYLZ0hFrb3Y7S5u+OBzDY8qs7Nr+ERF8wjbIdqH9rQnLL1FkmDPWa5EsWsZWoko5SUbkMpbSRMfiVqgRsYJ4kF6kjT6Y0yXtDNRyXT0pX5OcqpBWFafpgsi85YNb/g50gl9JD33uGCP6g4kgWwqrY7g5Y4SCy0kjkeZYndJwUQQPrJc+3bwLrlMNrvYvfbdtIU8XbNLGv1Pftf4R257BOsd9FUhjZKR2soWu8Zlw/aRGkeZDYEeTvsEnf0nbLuK981D7OO15AvFI9GQkNJokfNcZdPxK07Rh9VQ6p8RdZIxndkgLKtP0wlZceB+4r503hdVqXtXeqMfqIrdThJ1rqg7fNsGurGWkSbFSnZwR4nVITnImY3MUsl0qR7cKWV+jcEJHs1kfoWuH3CzFv/r5KZpmra/Tn9qefsS4tq3TeMfOxPpXRw8Vc9s46RS/M/R7KGjd2jULCaNQt0hxbcuQYe3J5GsQAdl12fQrqsqrXBWJh3RGrRe4KXWB+xiCXSzqKBoHjwfR6RYVKXqFTJdZB1VMp2yWDIMIrLiNJms6FyQU2/bAU3Ttva8Ru2jRIhylPJSatlx1FVzB9VKMvuoZMNhmT6dMtyhq+rrmWFkg/4lTTc2JmiyQwr8gdr43Mnr7WzEV929m/FdGo5SgCblIFbP5Y5LmnvUVpIdaMKlL3V9aOeCQasb1qKSUbiUZ/W8RtvPYDr7OSDVIBlUjZDiYMEaj3oYSAKWox7D3hNLdFEfgJLX7Eb9CgLYM4F0VlB6sjKVFl+UK52zLMcmjaKcL5W5R83ihERTKmIz/GIfWkmRuhD7eUs/ZKemywsYi0EyqBohZcGCNbY8EiSBaMvD2HtiOQPl/0ANWGDrVNqH9swIXPYQdj0sz1n2StfXhMUi05K1lZ7SKbx4MGecXTIEShFlMbIi+Rimi8bVwlhaSPEIKQgWLNu+ljt0BZAEHswBEstJKHxTCQAAAAAAALbDBu6gdmLs5pI+OFo+RCZttDzGg0mjGDunzn13FJxL2R2R7Vv+wcqsZZBN2dznnOt9U8pQkAR2BxLLElDsrknxYje1RXlSm/ErsOiXa8Fz5Ts449yj3+JtBOPXYQslW8TqDmKFrGv54qajmtuDtpQOrFa1hyiFYjTFdCePuqro4cr2hzuKQ61hXx1SSxGtag/xeJYWu6xjHhPKB6BR0zob4lE7GxfDuK6oGgUmZiAYWnpJEwEVQl/ajcl2Lj/bXIq7hvU4a2fW7PQJbd+I5YubTpLGCjcapKwymwrdADaQ9HhwMVOfKuoKQm3L2kTyBX1C2+GODPRoDxp1I5dVZvums4Cd3XWwxCibC1x6FNI+yjqptHKiujXmfJq0vKP5gnbbVAwHii3Pbqyd6b/B6FG/6JpbBFpkJlHbdHQUuz4FKT7Nqhx+ve/CHUgCW3aH32g/vDi7MF0SZW4qIWE6fnYP6jSme0hY+4Y977/RHNxGOGgU7nKxTHkXC9NSKUA6lrrJnsW8H+e2/Py5ppsePBkTt8hURjGMSGNJiJCxmdza8dq3SYHDarXcOL6chuRc1mI0bCThFSzPL9jolI2NqaKWG0RixWkak2rfMlEdxRIhNWTuN+pquEOxfIMkoFJpdTQnSCyrs4GdXXL7X7Gb4KDIjfOcc/f7upLbBbfTHVS8u6qRRu8+1IEaRuUFdHOlZhz/pSXjOJLa2OzDErtboQa7LJUVpc89mK8iUJmmfmAAF0tshPgBNI+SS9e0fZIJlekkEZiUNkpRpzx5mOXZBRuliOmURRQ8TzIIy4rTHDEEpxfzKntf7wdzhyN2po1IAjo1VsdJEsuKFLiDWpSYGGJ47554Xdd2l3DjLKguvci7dE3TtG3bNE3bD1L8zkGMzg68hybb6Ks21zUlaghs0gneDZ7rmYKVZsw7UrJjWVLsUq2kmKGN+mTZl/RA3YbGlSwZgLfM5TLfBu4utg9p2erpchRrjP+yZjdGXSXL62uTpZTpfAmSxaRx9Z6U1afpaHB6Gfj+xqVre++ri4T7qe5rvR/MHUgClkPMOtwUKbI6zpBYVqTkzq7R4jG8XTD/u17jzu59q/UmZX6UVuzex2EbJ93Sv7lTUBK9/5bfMzXjsC1Ku9GJ/j3G83a22YXNKkbtwJqIymSlBUKCbvboFcKRi5BL539tNEaVpdi1ezOJIPD8J9JpaQuWV9cmM8doSyrsrFn9jQZhWX2ajkmqvkrDip9dwuX30PXc3Xo/pDscksAC6q0O/+UhE8uKlL+DWoYPZkhFrb3Y7S5uKDqu4VFLd3ZvQuPQRMB2iPahPe0ZR2+RJNiTzkjeJq+UVXX99clKOVoSuGTi/KxJhNBrc72PCfFLp2pknCCcpCdJoz/G8kk7E5VMR1/q5ySnGoRl9Wm6ILznUe2nWCf0kfTc43o/qjuQBLKptDqClztKLLQO2SBlit3lBZOH8Jnj2reDe8hlstnF7rXvpi3k6ZpdpvGumanWtYeg3kEPa2mUjNyU7jv/GtTQX8a4Z/tIjaPMhkAPp32Czv4Ttt0Cf7VCF0Sm9mcK0Q8JkisVh0YjSkqjRc5ztS2vrM2ongtNx4qVjOnMBmFZfZpOSKoD9yCffWGRunelN/qBqtjtJFHnirrDt22gG2sZaVKsZAd3lFgdkoOc2cgslUyX6sG1KPNrDE5wSSbCn7aPW2LThQ0zL7f9dfpbydu3CNe+bRoXbKf5f4w2HXsfnW0c1Eq8zCVqBL1Do6YhaRTqDilAdQkRPOMHq8aYMuig7AIL2nVVpSXKyqQjGoOWjyXnwgiZx+c8mO6BqkaUNB1JT6PlqQTJwqPAhsOiKlVvieXltRlSyXSs2qxki0FEVpwmk1SdC1LybTehadq2C/qZVWU1obGhW/X4UVfNHVQryeyjkg2HZfp0ynCHrqqvZ4aRDfqXNN3YmKDJGhT4A7XxuZMXzNmIL5t7N+O7NJ6kCEtKIqyeyx2XNPeorSQ70IxJX+r60M7bCVrdL5YZGYVLeVbPa7R9O5avZzr7OSDVIBlUjZDiHH6978sdTlUPSeDB7D2xRBf1Fih5zW7UMSCATeVSWld6sjKVFl+UK510LMcmjaKc8JS5R83ihEyxkYjNcKtdcyVF6kLs5y39kKqWr2e6vHizGCSDqhFSljOs9x25IxgdSaDs0BnsPbHsgvJ/oAYssHUq7UN7ZkQeewgb0MuTjr3S9TVhsci0pF2lp3QO3lowZ5xdMgRKAWnxkSJ5XcuXMl00LBeG4kKKR0hBTrjet+wOXQEkgQdzgMSyFwrfVAIAAAAAAIDtsIE7qIE5dhtKHwctHw2Ttk8e49akUYydU+f+eAoqU3aj4lSmyx7uATpsyuY+WLAbBElgdyCxPAYUu5ujeLGb2qI8qc34xVb0K7PgufLNmnHu0e/mSmH8lmqhZItY3cKskIOZjmpuj7pSOrBa1R6iFIrRFNOdPOqqoocr2x/uKA61hn11SC1FtKo9xJZZWuyyLnxM0B+VRj0rsCskanzjWhqXJVWjwMQMBENLL2keoULoS7sx2c7Fp8lqu0SgHjlBoyNTpsqcwXSSNFa40SBllSkruSxsIOnx4GKmPlXUFYTalrWJ5Av6hLbDHRno0R406kYuq8z2TVcW7OxuCEuIs6nEpQcx7aMss0oLL6pbY07HSdkhmm5ot6oZZ3l2Yw1F/w1GjxpW19wi0CIzidqmo6PY9SlI8WlWBQu24FjZIAls2R1+o/3w4uzCdJUoc1MJCdPxs5tIu/GuEONPNRvv0MuLS0S65dXFU6uyCpEoL5VBpGOp7+xJ0E03XMie/UwHKaIyJm6RqYxSae6s2OWz8+U0JOeyU6Z+l4QfzHT0qOUGkVhxmsYMpt/zT8ISITVk7jfqarhDsXyDJKBSaXU0J0gsO2IDO7vz2/8G97GL3lKVF0gPit0f7452mzSrMuSGxknoNkxNWP5LS8JyJDOyyYvl2rfTLWUS/cauamVB6nMP5qsIVKapHxiQN3dFnyQCm9BGKWyUJ2cwnbIKgudJBmFZN0IGDBks4T6RWLCWgRQKusMRO9NGJAGdGqvjJIllFxS4g1qUmJi5i4Z7S9/vLD3Fn3dLvvkNhNu+n38uG+paf194fv/hqQ6d2keRl67tx+agYg0Xw0W6HWB6redBExN9N3iuJxpWmjFt+cpEXenZJyFHS1pJgUQb9cmyL+mBug1rzD1JvkWOMp3xX9ZuxrA5nul8CZLFpHH1npTVp+m0DNZMeVZOgFENsWCTKOgOJAHLIWYdbooUWR1nSCy7oOTOrtE3Ea59118vXdt1w//90Nj69WhYr85jdCx2/WZ2Z/dy8WL4SuX5o7pgMfgqXfs2q7ZjUc4T/lt+z9SExbYo7TmrLqvcZ/MCqxi1A2siKpOVFggJullCOmnudnckEUSO/0Q6LcF0VIJypjEahGX1aTolg01JVUuAip5YsBkUd4dDElhAvdXhvzxkYtkF5e+gluGtGde+7S5917tL1/Z9N/huKkbHLrfn83fubzcNXwGzHZummT6lzT8bzaXPRMx3iy2XFtM8wnaI9qE97QlLb5EkGHNWqZ1dy9BKmCkv2ShV3spM1rG518g4QTxIT5JGP4/p6Ev9nORUg7CsPk1HMhiXVLUEKOmJBZtHDXcgCWRTaXUEL3eUWGghsWvKFLt5tZHApWvbdvgDtduTsFT1Y4wvdoedXd/x4+breEGtvx0739n1L5PQdnazrlWPmkXvoK8KaZSM1Jbh0Gvf3axIPloYlw3bR2ocZTYEejjtE3T2n7DtOsrco9PRzRs1nW8HF4sQRQFJ1QObjhUrGdOZDcKy+jQdzWBMUtUSoEVVpdEPVMVuJ4k6V9Qdvm0D3VjLSJNiJTu4o8TqkBzkzEZmqWS6VA9unzK/xuAE5+UxxpB/vcJsI3WsgBvSOH7RQP7Acuztb/oHAi5d07RteCluMBDfbP36IGoZvUOjZjFpFOojKb51CREmi4SfQKIrVhqUXZ9Bu66qtMJZmXREayTLc7eMrgxkNB2VIJloFNhwWFSl6u3adMpiyTCIyIrTFDIYTap8AjSrympCY0O36vGjrpo7qFaS2UclGw7L9OmU4Q5dVV/PDCMb9C9purExQZNtU+AP1MbnTl5awOWeepV3aThKAZqUg1g9l3szae5RW0l2oAmXvtT1oZ0LRrJuWItKRuFSntXzGm0/g+ns54BUg2RQNUKKgwVrPOphIAlYjnoMe08s0UW9L0pesxt1IbDAngmks4LSk5WptPiiXOmcZTk2aRTlfKnMPWoWJySaUmGc4Rf70EqK1IXYz1v6ITs1XV7AWAySQdUIKQsWrLHlkSAJRFsext4Ty8Eo/wdqIBu2TqV9aM+MwGUPYdfD8pxlr3R9TVgsMi1ZW+kpncKLR3jG2SVDoBRRFiMrko9humhcLYylhRSPkIJgwbLta7lDVwBJ4MEcILEcj8I3lQAAAAAAAGA7oNgFAAAAAACHBcUuAAAAAAA4LCh2AQAAAADAYUGxCwAAAAAADguKXQAAAAAAcFhQ7AIAAAAAgMOCYhcAAAAAABwWFLsAAAAAAOCwoNgFAAAAAACHBcUuAAAAAAA4LCh2AQAAAADAYUGxCwAAAAAADguKXQAAAAAAcFhQ7AIAAAAAgMOCYhcAAAAAABwWFLtWmqZRXuqdF461XCAAAAAAwDlBsWvFXuz6bzWEjLH8RirQLhYAAAAA4Gyg2LViLHbt5axSp9obkwYFAAAAADgbKHbjBIWpsqs6Po9Wn0FPfb/WLg2wvHz+LD7+/PP5/Xv98fLnn4qEtScHAAAAAI3lxe6luxVmbdu2/dU559y1b++NQ8vU0DTdJUvm2kg7u6m7sBmH+53zquFD8vr0NJSbzx8+jIXp9zdvhse3n376/sMPj3x8++mncfSpVv7wYVDy9elpbYMBAAAAZ2Rpsdu39+L12re30vbSNX7VO1arl67tc2Wuj73YVWpTf3tYOtw+1kmK3devX8ct2O9v365SyBYuiN++HTeMX79+XdvAAAAAwJFZXuySYvTSzZqufXd7aS92uQJ33O31yt++bZqm7ftu3DO+9Wr76YhhUNvhCg258CBoH18a61dld3ZJsXu9zWobHxHSef3y5eXjx+d//OP7mzfffv65TJX5yy/i4+3b53fv9Mf3t281CUWK4J9/HvaDXz5+fP3yZW0nAAAAAMdh8WUM3gUKQ7F47dtZ1Ti9tha7VKa7Tru97tq3npxLF5apXrF9HzHlcImgMFWK1OzNWktRSzeJpRH3gl/dphWIP/44lJvPv/8+FqYvnz4Nj8dfNvD69DSOPtXKv/8+KPntxx/TKuA3b57/8Q/UvgAAAMBCCv6B2qVrugstdqfa0yt2g93fmExvXzbcnWUk3TXwy+yEwwlBZTk2Bk/oW0pjdrFr1GHLvD49vXz8OFyQkFDU/vrr87t3z3/88fLp037rv9cvX14+fXr+44/nd+++//prQhH85s33t29fPn7Etb8AAABAEsuKXX/H1Ll7bXmvUMMOtmKXlTnfjvVhJQ1HTVV34uEsDyh2UzvvqNh9/fp1KHCjl9t+++mnoa7ddVGbyq0Ifvfu+6+/mkw0FL643hcAAACIsbzY5fdLg7Z5x3lnm8x5870CbsI2XwF/iLTDWUsJlytkF7vshrHUmR7lH+v339Q1u69PT88fPuiX3s6qW1Rvzrnhs4Gt9v3288/PHz5guxcAAACQqPQ7u/dqt+39fd5doxe79F3lcJe7s2vRbQu8fv2q1LjffvwR1W0Ss9pXuOzhVvXCngAAAMCcOsXupWvu1+9uZpNxKUp5GmzQWupX41jGY7dT7L58/vz9t9/4bchffnl+9+48VybU41b4Sj8E8dtvuNUFAAAAMII7qMXxrxmQykql2FUuV9DHkgRmC6/Ky59/0j84GzZxcXVpJW5XQrPbvW/eoOQFAAAAHIpdsJzXpyfmdxXevEGN+zBuVS/nBVzOCwAA4OScq9g1/jHZYbDMznINhsLz+/fhVu7bt69PTw8w7IG9me2416en72/fBiXv8/v3FXUFAAAAts3Zi92xkf7QwUYuD0hCmgWdjjTBpCl///vfg6Jq3Mq1XGdsVFWRIDXuzptlHff69WvwIeT73//+oJkAAAAAG+Noxa5e2dgbo28dgyXF7qzSJV+XW4rd6Et4U8LiuNcvX2YXNqDeBQAAcEoOWOz6T/R9stSCbC/YNzWDLcPgX4XnDx+mKurtW6MOdDj95dm8WcNx/lUNzx8+VNMdAAAA2ChrF7vTnR3avh/uZja/t293cc7dO7X91fsFXw699JEKrOz6ycygNrnvxXyazvkGoZ2tv1dM1aYTp/NtuPpS4ttf/qJUutHDWZXoy21607sbyexn9e7NrJdNvqvkuLHe/faXvxjnCAAAAByGdYvdSzeWC/5P8l6nG/3eb0nh3WrYvw8wIbs8sgvJYJjFXG1vRrP53g3i3YyDO5yBVkIswSHBc8vcXz59Gm9+piijKmu6SnWb3rxynrj27c1zxHFBI+UBjhtvw/by6VPidAEAAIB9s2qxO1V2c/xq4nLf7jUXu0FxQMsC+jKjPJpvzDZNE9+8k9SeT/f+lJRUlmJXV8ARa9CZWoQ8//Oft6/F//nPbGWU6s15BdwGvckWu0HIjmLHVssnNIWFjrO4DAAAADgkaxa702YYfSMs+Rbt7FrKIHYXzVKF2BHUnk3NK7tC20SLXRZpa9B/K2h0uZUTNaM+evTlNr3pXcYwOWlW7Db+c9rXRFnHodgFAABwWra6s+tVCGPX8f0axa6lfa47KanydnbnRqBlfuTwOdES0+/puApJr5kGpssY/vY3KlMZTleVar5lbw6MTmF3dtmeLPUcN0j79re/4TIGAAAA52Qz1+z6L7jviadd4GvfCn+d5rZ6lecAW+4EBX/f9dM76cVugFI8KUWt1Oi3T/en9X7QKrXYjb7cpDf9oJ02ca99N8UncdS1b81/XuhcOccNLeOPxH378Ue7DgAAAMAx2M6vMTTe3/Jwu2v+7zbIXwfre2NKGcTuq5Uqdr1JNuFf688Ld8Ye2uEM7ERon+AJ+y4VO76c/fTYvd6tUexu0Ju+kyZncPHpX5MSlVrDcU3T+D+HjJ8eAwAAcELWLnZLk1QNRKufYuXRSkTrp2gNqrw1uy3tmzevX77YjzXWvqf1ZhHHhTeVEH4kDgAAADg2Ryt2dQ5cHg1Im5p+B/vL6FuzeveHH/7nv//7//3Xf1EdqCapillU2rU3yzqOuV0wKl0AAABn5SzFrrHk0vvvEXvRmVrpDoRF1Q8/fH/7Nrh1sH0gZ7P8GbyZ57jXp6fgE8i3H398fv/+cXoDAAAAG+MsxS6ox+vT0+zr8vuFDS8fP75+/bq2dqfg9evXl48fWS/QDx4AAADAqUCxC8rw8vkzLba+/eUv33/7DVVvJW417m+/TXdv9j9sfP68toIAAADA+qDYBSV5+fz5+6+/hoXXvfx6fv8eFdhyXj5/fn7/ntnHHR6//gojAwAAACModkF5Xr9+ff7jj29//Stfjf3ww/fffhsKX+z4Wnj9+vVW4P72m2TSb3/96/Mff8CeAAAAQACKXVCR16enSNX7ww/ffvoJtW+AX91+++knxXrff/nl+Y8/cGEuAAAAIIFiFzyC29Wlb99GSje/9v3zz9cvX9ZW/EG8fvny8uefw8UJJhO9fYsroQEAAAALKHbBo3l9enr5+PH599+///KLXtVNf+X25s1QAT9/+PDy+fN+i+DXL19ePn9+/vDhdk3CmzfM35ZJO7i///7y8SM2cQEAAIAkUOyClXn98iWp9g2L4Ddvvr99+/z+/fB4+fx5eDy+KHx9ehpHH/X5/vbtoKS1qKXV7W4rewAAAGALoNgF2+L1y5eXf/3r+d2777/8ol/sm1AW//zzrSymj2HDWH0MW7Ds49vPP5fR8K9//f7LL8/v3r3861+obgEAAICCoNgFW+f169eXT5+GCnjYAC5VBD/+cStqf/99qGtfQ9ehLgAAAGFJREFUPn3CdbcAAABAVVDsgr3y+vT08unTy6dPLx8/Pr97Nzy+//LL8Ij+mVf5Qvann8bRR31ePn4clERRCwAAAKwCil1wfF6/fLmVxfQxbBirj2ELln3gkgMAAABg4/x/pOGGBfuXWC4AAAAASUVORK5CYII=" alt="" />
通过自关联替代开窗函数实现SQL优化的更多相关文章
- SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...
- sqlserver开窗函数
从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...
- sql server ,OVER(PARTITION BY)函数用法,开窗函数,over子句,over开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx https://social.msdn.microsoft.c ...
- SQL使用开窗函数与CTE查询每月销售额的前几名
WITH tagTab AS( SELECT YearMonth, pm=RANK() OVER(PARTITION BY YearMonth ORDER BY amount DESC) FROM S ...
- sql over开窗函数,
sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...
- 【转】SQL SERVER 开窗函数简介
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...
- SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一 ...
- SQL SERVER开窗函数
作为一名开发人员来讲,我感觉在职场白混了好多年,可能是自己真的没有进取的精神吧,看了<程序员的SQL金典>这本电子书,真的让我学到了不少知识,真心喜欢这本电子书,书中讲解的内容比较好懂,也 ...
- [SQL SERVER系列]之常用函数和开窗函数介绍及实例
本文主要介绍SQL SERVER数据库中一些常用的系统函数及其SQL SERVER 2005以上支持的开窗函数. 1.常用函数 --从字符串右边截取指定字符数 select RIGHT('HELLO' ...
随机推荐
- 问题-关于SizeOf在Delphi7和Delphi2009下结果分别是16/32
问题:同样的代码在Delphi7和Delphi2009下结果分别是16/32,为什么?var LWindCode : array [0..15] of char; begin showmess ...
- Install PhoneGap
To Install, ensure that you have NodeJS installed, then open your commandline and run the following: ...
- ios之runtime学习
今天学习了一下ios的runtime,看了其他博主的博客写的很不错,自己就不班门弄斧了,仅在此转载: 1.关于oc中类和元类:http://husbandman.diandian.com/post/2 ...
- Java面试题集(51-70)
Java程序员面试题集(51-70) 51.类ExampleA 继承Exception,类ExampleB 继承ExampleA. 有如下代码片断: try{ thrownew ExampleB(“b ...
- Attribute特性验证模型model
数据验证我们往往分为前台验证和后台验证,而我们的后台验证每到一个方法中就要去验证一次,这样的代码想想都难以维护,这篇我们这篇文章就是为了解决这样的问题.用attribute 这个特性来解决这样的问题 ...
- HBase 使用场景和成功案例
有时候了解软件产品的最好方法是看看它是怎么用的.它可以解决什么问题和这些解决方案如何适用于大型应用架构,能够告诉你很多.因为HBase有许多公开的产品部署,我们正好可以这么做.本章节将详细介绍一些人们 ...
- C++ 外部调用private方法
1.思考,对于C++,能不能在外部调用私有方法? 2.在Java中,子类继承不能缩小父类成员的访问权限.因为在Java中,继承只是表示Is-A关系,因此,父类提供的接口,子类必须承诺仍然提供,不能缩小 ...
- cocos 3.0 一键打包android平台应该注意的细节
cocos2d-x 移植越来越便捷,走到cocos2d-x-3.0rc2,能够说移植已经非常完好了,我们仅仅要进行适当的适配,cocos能够直接帮助我们生成apk 我网络不好无法上传图片:(无图无捷豹 ...
- 一个 Android 任务队列的实现
最近在做Android项目时遇到这样一个问题:客户端向服务器请求数据,而在网络信号太差的情况下,数据迟迟不到,甚至丢失.服务器为了解决这个问题做了频繁的重发,android 客户端就会收到很多不想要的 ...
- Android背景渐变色效果
Android设置背景色可以通过在res/drawable里定义一个xml,如下: [代码]xml代码: 1 <?xml version="1.0" encoding=&qu ...