{"id":10038,"date":"2025-05-29T09:33:14","date_gmt":"2025-05-29T07:33:14","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=10038"},"modified":"2025-05-29T09:38:58","modified_gmt":"2025-05-29T07:38:58","slug":"optymalizacja-join","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/optymalizacja-join\/","title":{"rendered":"Optymalizacja join"},"content":{"rendered":"<h3 id=\"przeglad-tematu\" >Przegl\u0105d tematu<\/h3>\n<p>Funkcja wirtualna to specjalna tabela, kt\u00f3ra zwraca wiersz wynik\u00f3w dla zestawu warto\u015bci wej\u015bciowych, obliczany w czasie wykonywania zapytania. Funkcja ta nie istnieje w bazie danych, ale jest emulowana przez SAS. W artykule opisano funkcj\u0119 wirtualn\u0105 dla jawnej optymalizacji z\u0142\u0105cze\u0144 (join).<\/p>\n<h3 id=\"grupa-docelowa\" >Grupa docelowa<\/h3>\n<ul>\n<li>Konsultanci<\/li>\n<li>Programi\u015bci aplikacji<\/li>\n<\/ul>\n<h3 id=\"optymalizacja-zlaczen\" >Optymalizacja z\u0142\u0105cze\u0144<\/h3>\n<p>Funkcja wirtualna <em>pgm_JoinOptimisation<\/em> s\u0142u\u017cy do wymuszania optymalizacji z\u0142\u0105czenia dla po\u0142\u0105czonej tabeli obiektu biznesowego. Tabele obiekt\u00f3w biznesowych z typem danych Dane podstawowe, je\u015bli to mo\u017cliwe, s\u0105 automatycznie usuwane z instrukcji ODBC SQL, kt\u00f3ra ma zosta\u0107 wykonana i ponownie za\u0142adowana za po\u015brednictwem <em><a title=\"Persistence service\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/persistence-service\/\">Persistence service <\/a><\/em>serwera aplikacji przy u\u017cyciu wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej. Uproszczenie instrukcji bazy danych i wykorzystanie wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej zwi\u0119kszaj\u0105 szybko\u015b\u0107 wykonywania raportu. Korzystaj\u0105c z tej funkcji wirtualnej, opisane zachowanie mo\u017cna r\u00f3wnie\u017c wymusi\u0107 dla tabel obiekt\u00f3w biznesowych o innym typie danych (np. danych operacyjnych). W tym celu funkcja wirtualna jest wstawiana mi\u0119dzy faktyczne z\u0142\u0105czenia (join). Funkcja wirtualna jest po\u0142\u0105czona z tabel\u0105 bazow\u0105 za po\u015brednictwem kolumn u\u017cywanych w warunku z\u0142\u0105czenia, kt\u00f3re s\u0105 przekazywane jako parametry wej\u015bciowe odpowiedniego typu. Tabela, kt\u00f3ra ma zosta\u0107 po\u0142\u0105czona, jest po\u0142\u0105czona z odpowiednimi kolumnami funkcji wirtualnej za po\u015brednictwem jej kolumn kluczowych. Obowi\u0105zuj\u0105 ograniczenia dotycz\u0105ce korzystania z funkcji wirtualnych.<\/p>\n<p>Funkcja wirtualna obs\u0142uguje obecnie tylko klucze z obiekt\u00f3w biznesowych, kt\u00f3re sk\u0142adaj\u0105 si\u0119 z maksymalnie dw\u00f3ch atrybut\u00f3w GUID.<\/p>\n<p>Tabela sk\u0142ada si\u0119 z nast\u0119puj\u0105cych kolumn:<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 69px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><strong>Nazwa kolumny<\/strong><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">in_guid1_<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Do tego parametru wej\u015bciowego mo\u017cna przypisa\u0107 identyfikator GUID.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\">in_guid2<\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Do tego parametru wej\u015bciowego mo\u017cna przypisa\u0107 identyfikator GUID.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Powi\u0105zane zam\u00f3wienie sprzeda\u017cy ma zosta\u0107 wystawione dla pozycji zam\u00f3wienia sprzeda\u017cy. Nast\u0119puj\u0105ca instrukcja ODBC SQL jest wykonywana w ca\u0142o\u015bci w bazie danych:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">SELECT SD.number, S.number\n\nFROM app_sales_SalesOrderDetail SD\n\nLEFT OUTER JOIN app_sales_SalesOrder S\n\nON SD.header_=S.guid_<\/pre>\n<p>Po\u0142\u0105czenie jest formu\u0142owane w dw\u00f3ch etapach przy u\u017cyciu funkcji wirtualnej <em>pgm_JoinOptimisation<\/em> co umo\u017cliwia wykorzystanie danych zam\u00f3wienia sprzeda\u017cy za po\u015brednictwem wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">SELECT SD.number, S.number\n\nFROM (app_sales_SalesOrderDetail SD\n\nLEFT OUTER JOIN pgm_JoinOptimisation VF\n\nON VF.in_guid1_=SD.header_)\n\nLEFT OUTER JOIN app_sales_SalesOrder S\n\nON S.guid_=VF.in_guid1_<\/pre>\n<p>Serwer ODBC usuwa funkcj\u0119 wirtualn\u0105 i tabele zale\u017cne z instrukcji ODBC SQL i ponownie \u0142aduje wymagane dane za po\u015brednictwem <em><a title=\"Persistence service\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/persistence-service\/\">Persistence service<\/a><\/em>.<\/div><\/section>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-10038","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-wirtualne-tabele-i-funkcje"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/10038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=10038"}],"version-history":[{"count":5,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/10038\/revisions"}],"predecessor-version":[{"id":31946,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/10038\/revisions\/31946"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=10038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}