{"id":259,"date":"2016-04-04T14:13:06","date_gmt":"2016-04-04T12:13:06","guid":{"rendered":"http:\/\/explainit.pl\/wordpress\/?p=259"},"modified":"2016-08-09T21:06:08","modified_gmt":"2016-08-09T19:06:08","slug":"czy-dlugi-klucz-zly-klucz","status":"publish","type":"post","link":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/","title":{"rendered":"Czy d\u0142ugi klucz = z\u0142y klucz?"},"content":{"rendered":"<p>Histogramy wykorzystujemy do\u015b\u0107 powszechnie w celu mniej lub bardziej precyzyjnego szacowania selektywno\u015bci predykat\u00f3w u\u017cytych w zapytaniach (oczywi\u015bcie dla kolumn o nier\u00f3wnomiernym rozk\u0142adzie statystycznym). W pewnych przypadkach mo\u017cemy jednak pa\u015b\u0107 ofiar\u0105 uproszczenia zastosowanego przez Oracle podczas generowania histogram\u00f3w, czego efektem b\u0119d\u0105 z\u0142e\/bardzo z\u0142e szacunki selektywno\u015bci. Uproszczenie to dotyczy kolumn typu tekstowego i polega na uwzgl\u0119dnianiu w histogramie wy\u0142\u0105cznie pierwszych 64 znak\u00f3w (lub 32 znak\u00f3w w wersji Oracle Database 11g) tekstu kolumny. W rezultacie, r\u00f3\u017cne warto\u015bci posiadaj\u0105ce jednakowy prefiks 64-znakowy b\u0119d\u0105 potraktowane jako ta sama warto\u015b\u0107 zar\u00f3wno w histogramie, jak i podczas szacowania selektywno\u015bci.<\/p>\n<p>Przyjrzyjmy si\u0119 nast\u0119puj\u0105cemu przyk\u0142adowi. Tabela H_TEST zawiera 100 rekord\u00f3w i dwie kolumny &#8211; A i B. Warto\u015bci obu kolumn s\u0105 niepowtarzalne w obr\u0119bie tabeli, sk\u0142adaj\u0105 si\u0119 jednak z 64-znakowej cz\u0119\u015bci sta\u0142ej, kt\u00f3rej towarzyszy niepowtarzalna liczba ca\u0142kowita &#8211; w kolumnie A umieszczona jest ona na pocz\u0105tku tekstu, w kolumnie B &#8211; na ko\u0144cu (zatem pierwsze 64 znaki kolumny B s\u0105 jednakowe w ka\u017cdym rekordzie). Generujemy dla obu kolumn histogramy cz\u0119stotliwo\u015bciowe, a nast\u0119pnie obserwujemy szacowan\u0105 selektywno\u015b\u0107 predykat\u00f3w (kolumn\u0119 ROWS planu wykonania), kt\u00f3rych celem jest wybranie jednego rekordu z tabeli (prawid\u0142owa selektywno\u015b\u0107 = 1%). Pierwszy predykat pos\u0142uguje si\u0119 kolumn\u0105 A, drugi &#8211; kolumn\u0105 B.<br \/>\n<code><br \/>\nSQL&gt; select * from H_TEST;<\/code><br \/>\n<code><br \/>\nA \u00a0 \u00a0 \u00a0 \u00a0\u00a0 B<br \/>\n---------- ----------<br \/>\n1XXX...XXX XXX...XXX1<br \/>\n2XXX...XXX XXX...XXX2<br \/>\n...<br \/>\n100 rows selected.<\/code><br \/>\n<code><br \/>\nSQL&gt; exec dbms_stats.gather_table_stats('','H_TEST', method_opt=&gt;'FOR ALL COLUMNS SIZE 100');<\/code><br \/>\n<code><br \/>\nSQL&gt; select a from h_test where a='1XXX...XXX';<br \/>\n...<br \/>\nExecution Plan<br \/>\n-------------------------------------------------------------------<br \/>\n| Id | Operation\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Name | Rows | Bytes | Cost (%CPU)| Time |<br \/>\n-------------------------------------------------------------------<br \/>\n| 0\u00a0 | SELECT STATEMENT |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0 <strong>1<\/strong> |\u00a0\u00a0\u00a0 67 |\u00a0 2 (0) | 00:00:01 |<br \/>\n|* 1 | TABLE ACCESS FULL|H_TEST|\u00a0\u00a0\u00a0 <strong>1<\/strong> |\u00a0\u00a0\u00a0 67 |\u00a0 2 (0) | 00:00:01 |<br \/>\n-------------------------------------------------------------------<br \/>\nStatistics<br \/>\n----------------------------------------------------------<br \/>\n...<br \/>\n1 rows processed<\/code><br \/>\n<code><br \/>\nSQL&gt; select b from h_test where b='XXX...XXX1';<br \/>\n...<br \/>\nExecution Plan<br \/>\n-------------------------------------------------------------------<br \/>\n| Id | Operation \u00a0 \u00a0 \u00a0\u00a0 | Name | Rows | Bytes | Cost (%CPU)| Time |<br \/>\n-------------------------------------------------------------------<br \/>\n| 0\u00a0 | SELECT STATEMENT |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0 <strong>100<\/strong> |\u00a0 6700 |\u00a0 2 (0) | 00:00:01 |<br \/>\n|* 1 | TABLE ACCESS FULL|H_TEST|\u00a0 <strong>100<\/strong> |\u00a0 6700 |\u00a0 2 (0) | 00:00:01 |<br \/>\n-------------------------------------------------------------------<br \/>\nStatistics<br \/>\n----------------------------------------------------------<br \/>\n...<br \/>\n1 rows processed<br \/>\n<\/code><\/p>\n<p>Jak wida\u0107, optymalizator zapyta\u0144 prawid\u0142owo szacuje selektywno\u015b\u0107 predykatu opartego na kolumnie A &#8211; 1%, natomiast ca\u0142kowicie b\u0142\u0119dnie zachowuje si\u0119 w przypadku predykatu opartego na kolumnie B, spodziewaj\u0105c si\u0119, \u017ce predykat zostanie spe\u0142niony przez 100% rekord\u00f3w (gdy\u017c 100% rekord\u00f3w ma jednakowy 64-znakowy prefiks&#8230;).<\/p>\n<p>W jaki spos\u00f3b mo\u017cemy unika\u0107 konsekwencji takiego zachowania si\u0119 serwera? Niepotrzebnie nie prefiksowa\u0107 kluczy d\u0142ugimi sta\u0142ymi \u0142a\u0144cuchami znakowymi, je\u015bli klucz musi by\u0107 d\u0142ugi, to niech cz\u0119\u015b\u0107 sta\u0142a znajduje si\u0119 na jego ko\u0144cu, dekomponowa\u0107 d\u0142ugie, z\u0142o\u017cone warto\u015bci tekstowe (np. adresy URL) na wiele kolumn tabeli, stosowa\u0107 indeksy funkcyjne oparte o funkcj\u0119 SUBSTR(), itp.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Histogramy wykorzystujemy do\u015b\u0107 powszechnie w celu mniej lub bardziej precyzyjnego szacowania selektywno\u015bci predykat\u00f3w u\u017cytych w zapytaniach (oczywi\u015bcie dla kolumn o nier\u00f3wnomiernym rozk\u0142adzie statystycznym). W pewnych przypadkach mo\u017cemy jednak pa\u015b\u0107 ofiar\u0105 uproszczenia zastosowanego przez Oracle podczas generowania histogram\u00f3w, czego efektem b\u0119d\u0105 z\u0142e\/bardzo z\u0142e szacunki selektywno\u015bci. Uproszczenie to dotyczy kolumn typu tekstowego i polega na uwzgl\u0119dnianiu w <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Czy d\u0142ugi klucz = z\u0142y klucz?<\/span>[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[20],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Czy d\u0142ugi klucz = z\u0142y klucz? - Explain IT<\/title>\n<meta name=\"description\" content=\"Czy d\u0142ugi klucz = z\u0142y klucz?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Czy d\u0142ugi klucz = z\u0142y klucz? - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Czy d\u0142ugi klucz = z\u0142y klucz?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-04T12:13:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-08-09T19:06:08+00:00\" \/>\n<meta name=\"author\" content=\"Maciej Zakrzewicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maciej Zakrzewicz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\"},\"author\":{\"name\":\"Maciej Zakrzewicz\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\"},\"headline\":\"Czy d\u0142ugi klucz = z\u0142y klucz?\",\"datePublished\":\"2016-04-04T12:13:06+00:00\",\"dateModified\":\"2016-08-09T19:06:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\"},\"wordCount\":350,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"keywords\":[\"statystyki\"],\"articleSection\":[\"Oracle Database\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\",\"name\":\"Czy d\u0142ugi klucz = z\u0142y klucz? - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2016-04-04T12:13:06+00:00\",\"dateModified\":\"2016-08-09T19:06:08+00:00\",\"description\":\"Czy d\u0142ugi klucz = z\u0142y klucz?\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Czy d\u0142ugi klucz = z\u0142y klucz?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"name\":\"Explain IT\",\"description\":\"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.\",\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\",\"name\":\"Explain IT\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"contentUrl\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"width\":196,\"height\":64,\"caption\":\"Explain IT\"},\"image\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\",\"name\":\"Maciej Zakrzewicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"caption\":\"Maciej Zakrzewicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Czy d\u0142ugi klucz = z\u0142y klucz? - Explain IT","description":"Czy d\u0142ugi klucz = z\u0142y klucz?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/","og_locale":"pl_PL","og_type":"article","og_title":"Czy d\u0142ugi klucz = z\u0142y klucz? - Explain IT","og_description":"Czy d\u0142ugi klucz = z\u0142y klucz?","og_url":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/","og_site_name":"Explain IT","article_published_time":"2016-04-04T12:13:06+00:00","article_modified_time":"2016-08-09T19:06:08+00:00","author":"Maciej Zakrzewicz","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Maciej Zakrzewicz","Szacowany czas czytania":"2 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#article","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/"},"author":{"name":"Maciej Zakrzewicz","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219"},"headline":"Czy d\u0142ugi klucz = z\u0142y klucz?","datePublished":"2016-04-04T12:13:06+00:00","dateModified":"2016-08-09T19:06:08+00:00","mainEntityOfPage":{"@id":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/"},"wordCount":350,"commentCount":0,"publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"keywords":["statystyki"],"articleSection":["Oracle Database"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/","url":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/","name":"Czy d\u0142ugi klucz = z\u0142y klucz? - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2016-04-04T12:13:06+00:00","dateModified":"2016-08-09T19:06:08+00:00","description":"Czy d\u0142ugi klucz = z\u0142y klucz?","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/2016\/04\/04\/czy-dlugi-klucz-zly-klucz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Czy d\u0142ugi klucz = z\u0142y klucz?"}]},{"@type":"WebSite","@id":"https:\/\/explainit.pl\/wordpress\/#website","url":"https:\/\/explainit.pl\/wordpress\/","name":"Explain IT","description":"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.","publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/explainit.pl\/wordpress\/#organization","name":"Explain IT","url":"https:\/\/explainit.pl\/wordpress\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/","url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","contentUrl":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","width":196,"height":64,"caption":"Explain IT"},"image":{"@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219","name":"Maciej Zakrzewicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","caption":"Maciej Zakrzewicz"}}]}},"_links":{"self":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/259"}],"collection":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=259"}],"version-history":[{"count":7,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/259\/revisions"}],"predecessor-version":[{"id":334,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/259\/revisions\/334"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}