{"id":1283,"date":"2012-07-20T08:39:58","date_gmt":"2012-07-20T07:39:58","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=1283"},"modified":"2012-07-20T08:42:07","modified_gmt":"2012-07-20T07:42:07","slug":"artatlan-kis-1-lapos-lekerdezesek","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2012\/07\/20\/artatlan-kis-1-lapos-lekerdezesek\/","title":{"rendered":"\u00c1rtatlan kis 1 lapos lek\u00e9rdez\u00e9sek"},"content":{"rendered":"<p>Csal\u00f3ka az adatb\u00e1zis. Sokan f\u00e9lre\u00e9rtik, mire val\u00f3, \u00e9s a 90-es \u00e9vek st\u00edlus\u00e1ban minden vackot r\u00e1b\u00edznak, ett\u0151l persze megfekszik szeg\u00e9ny. A f\u00e9lre\u00e9rt\u00e9s onnan ered, hogy az MS akkor azt mondta, spben kell meg\u00edrni az \u00fczleti logik\u00e1t (mivel a VB haszn\u00e1lhatatlan volt, a C++ meg a legt\u00f6bb ember kez\u00e9ben csak bug gy\u00e1rt\u00e1sra j\u00f3). A Delphi ez\u00e9rt \u00e9lte a f\u00e9nykor\u00e1t.<br \/>\nNa sz\u00f3val, amikor szeg\u00e9ny dbre sok \u00fczleti logik\u00e1t b\u00edznak, akkor mivel \u0151benne nem lehet a hagyom\u00e1nyos m\u00f3don cache-elni mint egy appszerveren, \u00edgy az \u00f6sszes piszlics\u00e1r\u00e9, a b\u00fcd\u00f6s \u00e9letben nem v\u00e1ltozik de legyen a dbben mert az j\u00f3 adatot is t\u00e1bl\u00e1kb\u00f3l kell kiolvasni. Pl. az enumok \u00e9rt\u00e9k\u00e9t, amit az\u00e9rt nem szoktunk megv\u00e1ltoztatni a dbben, mert ehhez \u00fagyis a programozott enum \u00e9rt\u00e9keket is \u00e1t k\u00e9ne \u00edrni, r\u00e1ad\u00e1sul a kett\u0151t egyid\u0151ben szinkronban.<br \/>\n\u00cdgy azt\u00e1n a t\u00edzmilli\u00f3s vas\u00fa SQL Server olyan dolgokon dolgozik, ami nem az \u0151 feladata. 1 lapolvas\u00e1s nem a vil\u00e1g, \u00e9s k\u00fcl\u00f6nben is mem\u00f3ri\u00e1ban vannak a pici t\u00e1bl\u00e1k, nem jelent ez nagy terhel\u00e9st.<br \/>\nVal\u00f3di cacheb\u0151l, appszerveren felolvasni egy pl. egy stringet p\u00e1r nanonsecundum.<\/p>\n<p>N\u00e9zz\u00fck meg ezt SQL Serveren bel\u00fclr\u0151l:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\ndeclare @i int = 1000000, @a varchar(200)\r\n\r\nwhile (@i &gt; 0)\r\nbegin\r\n\tselect @a = s.Value from Setting s where s.Name = &#039;TestSetting1&#039;;\r\n\tset @i-=1;\r\nend\r\n<\/pre>\n<p>A Setting t\u00e1bla k\u00e9t soros, \u00e9s rendes voltam, raktam clustered indexet a Name oszlopra. 15mp-ig tart a ciklus, a select n\u00e9lk\u00fcl kevesebb, mint 1 mp (kb. 800 millisec).<br \/>\nAzaz a select \u00e1ltali kiolvas\u00e1s kb. 15us, m\u00edg ugyanez az appszerveren nanosec nagys\u00e1grend\u0171. Nem mindegy.<br \/>\nHa m\u00e1r ennyire szerelmesek vagyunk az adatb\u00e1zisba, akkor m\u00e9g azt meg lehet tenni, hogy param\u00e9terk\u00e9nt adjuk \u00e1t neki ezeket a well-known be\u00e1ll\u00edt\u00e1sokat.<\/p>\n<p>Pl.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\ncreate proc Teszt1\r\nas\r\ndeclare @a varchar(200)\r\nselect @a = s.Value from Setting s where s.Name = &#039;TestSetting1&#039;;\r\ngo\r\n\r\ncreate proc Teszt2\r\n@par varchar(200)\r\nas\r\ndeclare @a varchar(200) = @par\r\ngo\r\n\r\ndeclare @i int = 1000000, @a varchar(200)\r\nwhile (@i &gt; 0)\r\nbegin\r\n\texec Teszt1;\r\n\tset @i-=1;\r\nend\r\ngo\r\n\r\ndeclare @i int = 1000000, @a varchar(200)\r\nselect @a = s.Value from Setting s where s.Name = &#039;TestSetting1&#039;;\r\nwhile (@i &gt; 0)\r\nbegin\r\n\texec Teszt2 @a;\r\n\tset @i-=1;\r\nend\r\n<\/pre>\n<p>28 vs 12 mp, l\u00e1tsz\u00f3lag nem nagy deal, de egy terhelt szervern\u00e9l minden gramm sz\u00e1m\u00edt.<\/p>\n<p>Ps. sok c\u00e9gn\u00e9l l\u00e1ttam ilyeneket, senki ne vegye mag\u00e1ra.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Csal\u00f3ka az adatb\u00e1zis. Sokan f\u00e9lre\u00e9rtik, mire val\u00f3, \u00e9s a 90-es \u00e9vek st\u00edlus\u00e1ban minden vackot r\u00e1b\u00edznak, ett\u0151l persze megfekszik szeg\u00e9ny. A f\u00e9lre\u00e9rt\u00e9s onnan&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49,6,13,4,30,21,58,77,78],"tags":[],"class_list":["post-1283","post","type-post","status-publish","format-standard","hentry","category-architektura","category-adatbazisok","category-design","category-szakmai-elet","category-sql-server","category-sql-server-2005","category-sql-server-2008","category-sql-server-2008-r2","category-sql-server-2012"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=1283"}],"version-history":[{"count":5,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1283\/revisions"}],"predecessor-version":[{"id":1288,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1283\/revisions\/1288"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=1283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=1283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=1283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}