{"id":994,"date":"2016-02-22T09:51:57","date_gmt":"2016-02-22T09:51:57","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?p=994"},"modified":"2020-09-21T15:25:30","modified_gmt":"2020-09-21T15:25:30","slug":"die-dunkle-seite-des-parsens","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/","title":{"rendered":"Die dunkle Seite des Parsens"},"content":{"rendered":"\n<p><strong>Performance Unterschiede bei der Verwendung von Nativen Queries vs. Prepared Statements mit Oracle<\/strong><\/p>\n\n\n\n<p>Native Datenbankabfragen in einer Anwendung erschweren im Allgemeinen deren Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln. Im Rahmen der Performance Analyse einer Java-Altanwendung mit Oracle Datenbank konnten wir noch einen weiteren Aspekt entdecken, der gegen die Verwendung solcher Abfragen spricht: die Performance gegen\u00fcber Prepared Statements im Kontext einer Oracle Datenbank.<\/p>\n\n\n\n<p>Ausgangspunkt war eine Analyse durch den Automatic Database Diagnostic Monitor (ADDM) von Oracle <a href=\"http:\/\/www.informatik-aktuell.de\/betrieb\/datenbanken\/oracle-12c-datenbank-tuning-und-monitoring-mit-real-time-addm.html\" target=\"_blank\" rel=\"noreferrer noopener\">[1]<\/a>. Dieser analysiert unter anderem SQL Abfragen und gibt Empfehlungen. Im vorliegenden Fall lieferte er f\u00fcr eine ganze Reihe von Abfragen folgende Meldung:<\/p>\n\n\n\n<p><em>Hard Parse aufgrund von literaler Auslastung: SQL Anweisungen wurden wegen der Verwendung von Literalen nicht gemeinsam benutzt. Dies hat zu zus\u00e4tzlichen Hard Parses gef\u00fchrt, die wesentliche Datenbankzeit belegt haben.<\/em><\/p>\n\n\n\n<p><em>\u00dcberpr\u00fcfen Sie die Anwendungslogik auf die m\u00f6gliche Benutzung von Bindevariablen anstelle von Literalen.<\/em><\/p>\n\n\n\n<p>Verwendung von Literalen bedeutet dabei das direkte Einf\u00fcgen der Werte in Bedingungen, beispielsweise:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    SELECT * FROM meine_tabelle WHERE mein_feld = 123<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Demgegen\u00fcber steht bei der Verwendung von Bindevariablen nur ein Platzhalter anstelle eines konkreten Wertes und wird erst im folgenden Schritt eingef\u00fcgt.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Performance-Analyse Literal vs. Bindevariable<\/h2>\n\n\n\n<p>Welche Auswirkung auf die Performance der Datenbankabfragen haben nun aber diese beiden Varianten und welche Ursachen gibt es hierf\u00fcr? Hierf\u00fcr ist ein Blick in die Query Verarbeitung von Oracle notwendig. Vor der eigentlichen Ausf\u00fchrung muss der Query geparsed werden, um so m\u00f6gliche Abarbeitungspl\u00e4ne zu ermitteln. Hier wird beispielsweise ermittelt, ob und wie ein Index genutzt werden kann. Dieses \u201cHard Parse\u201d ist notwendig, um den optimalen Weg der Abarbeitung zu ermitteln und kann mehr Zeit in Anspruch nehmen, als die eigentliche Ausf\u00fchrung. Allerdings speichert sich Oracle einen solchen Abarbeitungsplan zu einem Query \u2013 soll dieser erneut ausgef\u00fchrt werden, entf\u00e4llt der Overhead des Parsens. Werden Literale benutzt, so funktioniert dies nur, wenn auch deren Werte gleich sind.<\/p>\n\n\n\n<p>Bei der Nutzung von Bindevariablen hingegen, erstellt Oracle den Abarbeitungsplan f\u00fcr die Abfrage mit den Platzhaltern und speichert dies auch so. Es ist daher egal, ob dieser Query sp\u00e4ter mit anderen Werten ausgef\u00fchrt wird \u2013 als Vergleich dient immer die Abfrage mit den Bindevariablen. Ein vorher ermittelter Abarbeitungsplan kann somit erneut genutzt werden \u2013 das Parsen entf\u00e4llt.<\/p>\n\n\n\n<p>Doch wie viel macht dies tats\u00e4chlich aus? Da die von uns untersuchte Java-Altanwendung noch rein mit JDBC Mitteln arbeitet, wurde eine kleine Beispielanwendung geschrieben, welche ebenfalls nur JDBC nutzt und identische Abfragen sowohl als nativen Query als auch mittels Prepared Statement absetzt. Beim Nutzen von Prepared Statements k\u00fcmmert sich JDBC darum, die Bindevariablen an Oracle zu \u00fcbergeben. Die konkreten Abfragen waren dabei an die angelehnt, welche der ADDM als problematisch gemeldet hatte. F\u00fcr die&nbsp;Tests f\u00fchrten wir jeweils mehrere hundert Abfragen&nbsp;mit unterschiedlichen Werten und auch gegen verschiedene Oracle Instanzen aus \u2013 <strong>im Ergebnis war die Ausf\u00fchrung der Prepared Statements stets um den Faktor 10 bis teilweise 100 schneller<\/strong>! So einen dramatischen Unterschied hatten wir nicht erwartet \u2013 jedoch deckt es sich auch mit den Messungen unter&nbsp;<a href=\"http:\/\/www.akadia.com\/services\/ora_bind_variables.html\" target=\"_blank\" rel=\"noreferrer noopener\">[2]<\/a>. Die Tests haben wir dann nochmals wiederholt unter Nutzung von JPA und EclipseLink, das Zeitverhalten war vergleichbar gut&nbsp;dem der Prepared Statements.<\/p>\n\n\n\n<p>Hieraus ergab sich nun die ganz klare Empfehlung, die Java-Anwendung \u2013 zumindest in den relevanten Komponenten \u2013 auf die Nutzung von Prepared Statements umzustellen. Die notwendigen \u00c4nderungen am Code sind dabei \u00fcberschaubar, wie das folgende Beispiel zeigt:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    import java.sql.Connection;\n    import java.sql.Statement;\n    import java.sql.PreparedStatement;\n    ...\n    \/\/ 1. Query mit Literal als nativer Query\n    Statement stmt = connection.createStatement();\n    stmt.executeQuery(\"select * from meine_tabelle where mein_feld = 123\");\n    \/\/ 2. Query mit Bindevariable unter Nutzung von PreparedStatement\n    String query = \"select * from meine_tabelle where mein_feld = ?\";\n    PreparedStatement stmt2 = connection.prepareStatement(query);\n    stmt2.setInt(1, 123);\n    stmt2.executeQuery();<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Cursor Sharing \u2013 Tuning auf der Datenbank<\/h2>\n\n\n\n<p>Zum Abschluss soll noch eine M\u00f6glichkeit erw\u00e4hnt werden, welche sich direkt auf der Oracle Datenbank selbst bietet \u2013 beispielsweise, wenn der entsprechende Code nicht umgebaut werden kann. Im Analyse Ergebnis des ADDM wurde noch folgender Hinweis gegeben:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em>Alternativ k\u00f6nnen Sie den Parameter \u201ccursor_sharing\u201d auf \u201cforce\u201d festlegen.&#8220;<\/em><\/p><\/blockquote>\n\n\n\n<p>Normalerweise werden nur identische Abfragen auch gleich behandelt, bzw. nicht neu geparsed \u2013 daher der Vorteil der Nutzung von Bindevariablen bzw. Prepared Statements. Wird dieser Parameter jedoch auf \u201cforce\u201d gesetzt, so werden auch Queries als gleich behandelt, wenn diese sich nur in den genutzten Literalen unterscheiden. Klingt also erst einmal wie ein Quick Win \u2013 die Code\u00e4nderungen w\u00e4ren also \u00fcberfl\u00fcssig. Jedoch r\u00e4t Oracle&nbsp;<a href=\"https:\/\/docs.oracle.com\/cd\/B19306_01\/server.102\/b14237\/initparams035.htm#REFRN10025\" target=\"_blank\" rel=\"noreferrer noopener\">selbst<\/a>&nbsp;schon davon ab (ohne jedoch ins Detail zu gehen) dies einfach so zu tun. Eine umfangreichere&nbsp;Beschreibung des Parameters inklusive seiner Vor- und Nachteile gibt es f\u00fcr Interessierte <a href=\"http:\/\/stackoverflow.com\/questions\/8581413\/relationship-between-cursor-sharing-bind-variable-peeking-and-histograms\" target=\"_blank\" rel=\"noreferrer noopener\">hier<\/a>.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>Mit kleinen Code\u00e4nderungen l\u00e4sst sich auch bei \u00e4lteren Java Anwendungen, welche viele native Queries einsetzen, einiges an Performance herausholen \u2013 zumindest wenn die Datenbank Oracle hei\u00dft. Ein Umbau auf Prepared Statements lohnt \u2013 vor allem dann, wenn die Anwendung \u00e4hnliche Abfragen oft durchf\u00fchren muss. Ob auch andere DBMS solche Unterschiede in der Performance zwischen Literalen und Bindevariablen aufweisen, konnten wir nicht pr\u00fcfen, ist aber denkbar.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Siehe auch:<\/p>\n\n\n\n<p>[1] Weitere Infos zum ADDM:&nbsp;<a href=\"http:\/\/www.informatik-aktuell.de\/betrieb\/datenbanken\/oracle-12c-datenbank-tuning-und-monitoring-mit-real-time-addm.html\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle 12c: Datenbank Tuning und Monitoring<\/a><br>[2] Details zum Hard Parse und dessen Performance:&nbsp;<a href=\"http:\/\/www.akadia.com\/services\/ora_bind_variables.html\" target=\"_blank\" rel=\"noreferrer noopener\">Bind variables \u2013 The key to application performance<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Native Datenbankabfragen in einer Anwendung erschweren im Allgemeinen deren Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln. Im Rahmen der Performance Analyse einer Java-Altanwendung mit Oracle Datenbank konnten wir noch einen weiteren Aspekt entdecken, der gegen die Verwendung solcher Abfragen spricht: die Performance gegen\u00fcber Prepared Statements im Kontext einer Oracle Datenbank.<\/p>\n","protected":false},"author":27,"featured_media":1228,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[15],"tags":[174,406,407,408,409,410,411,412,413,414,415,416],"topics":[],"class_list":["post-994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-oracle","tag-performance","tag-performance-unterschiede","tag-native-queries","tag-prepared-statements","tag-datenbank","tag-datenbank-abfragen","tag-literal-vs-bindevariable","tag-cursor-sharing","tag-datenbank-tuning","tag-bind-variables","tag-application-performance"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Die dunkle Seite des Parsens - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"Native Datenbankabfragen in einer Anwendung erschweren oft ihre Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Die dunkle Seite des Parsens - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"Native Datenbankabfragen in einer Anwendung erschweren oft ihre Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-22T09:51:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-21T15:25:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png\" \/>\n\t<meta property=\"og:image:width\" content=\"821\" \/>\n\t<meta property=\"og:image:height\" content=\"454\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andreas Post\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:site\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andreas Post\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/\",\"name\":\"Die dunkle Seite des Parsens - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png\",\"datePublished\":\"2016-02-22T09:51:57+00:00\",\"dateModified\":\"2020-09-21T15:25:30+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/48c8e0de288ca862ede539399e7b77d6\"},\"description\":\"Native Datenbankabfragen in einer Anwendung erschweren oft ihre Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png\",\"width\":821,\"height\":454},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Die dunkle Seite des Parsens\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/48c8e0de288ca862ede539399e7b77d6\",\"name\":\"Andreas Post\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/post_andreas-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/post_andreas-150x150.jpg\",\"caption\":\"Andreas Post\"},\"description\":\"Andreas Post ist seit 2007 als Software-Entwickler und Teamlead bei der ZEISS Digital Innovation besch\u00e4ftigt. Sein Schwerpunkt liegt im Java \/ Java EE Umfeld mit dem fachlichen Fokus auf Entwicklungen in den Bereichen Energiewirtschaft und Mobility Solutions.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/andreaspost\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Die dunkle Seite des Parsens - ZEISS Digital Innovation Blog","description":"Native Datenbankabfragen in einer Anwendung erschweren oft ihre Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln.","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:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/","og_locale":"de_DE","og_type":"article","og_title":"Die dunkle Seite des Parsens - ZEISS Digital Innovation Blog","og_description":"Native Datenbankabfragen in einer Anwendung erschweren oft ihre Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/","og_site_name":"Digital Innovation Blog","article_publisher":"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/","article_published_time":"2016-02-22T09:51:57+00:00","article_modified_time":"2020-09-21T15:25:30+00:00","og_image":[{"width":821,"height":454,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png","type":"image\/png"}],"author":"Andreas Post","twitter_card":"summary_large_image","twitter_creator":"@ZEISS_di","twitter_site":"@ZEISS_di","twitter_misc":{"Verfasst von":"Andreas Post","Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/","name":"Die dunkle Seite des Parsens - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png","datePublished":"2016-02-22T09:51:57+00:00","dateModified":"2020-09-21T15:25:30+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/48c8e0de288ca862ede539399e7b77d6"},"description":"Native Datenbankabfragen in einer Anwendung erschweren oft ihre Wartbarkeit bzw. die M\u00f6glichkeit, unabh\u00e4ngig von einer spezifischen Datenbank zu entwickeln.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi.png","width":821,"height":454},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/die-dunkle-seite-des-parsens\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/"},{"@type":"ListItem","position":2,"name":"Die dunkle Seite des Parsens"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/48c8e0de288ca862ede539399e7b77d6","name":"Andreas Post","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/post_andreas-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/post_andreas-150x150.jpg","caption":"Andreas Post"},"description":"Andreas Post ist seit 2007 als Software-Entwickler und Teamlead bei der ZEISS Digital Innovation besch\u00e4ftigt. Sein Schwerpunkt liegt im Java \/ Java EE Umfeld mit dem fachlichen Fokus auf Entwicklungen in den Bereichen Energiewirtschaft und Mobility Solutions.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/andreaspost\/"}]}},"author_meta":{"display_name":"Andreas Post","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/andreaspost\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2016\/02\/201602_cursor_sharing_fi-600x332.png","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Java<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Java<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Oracle<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Performance<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Performance-Unterschiede<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Native Queries<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Prepared Statements<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Datenbank<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Datenbank-Abfragen<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Literal vs. Bindevariable<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Cursor Sharing<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Datenbank Tuning<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Bind variables<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">application performance<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Oracle<\/span>","<span class=\"advgb-post-tax-term\">Performance<\/span>","<span class=\"advgb-post-tax-term\">Performance-Unterschiede<\/span>","<span class=\"advgb-post-tax-term\">Native Queries<\/span>","<span class=\"advgb-post-tax-term\">Prepared Statements<\/span>","<span class=\"advgb-post-tax-term\">Datenbank<\/span>","<span class=\"advgb-post-tax-term\">Datenbank-Abfragen<\/span>","<span class=\"advgb-post-tax-term\">Literal vs. Bindevariable<\/span>","<span class=\"advgb-post-tax-term\">Cursor Sharing<\/span>","<span class=\"advgb-post-tax-term\">Datenbank Tuning<\/span>","<span class=\"advgb-post-tax-term\">Bind variables<\/span>","<span class=\"advgb-post-tax-term\">application performance<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 10\u00a0Jahren ago","modified":"Updated 6\u00a0Jahren ago"},"absolute_dates":{"created":"Posted on Februar 22, 2016","modified":"Updated on September 21, 2020"},"absolute_dates_time":{"created":"Posted on Februar 22, 2016 9:51 a.m.","modified":"Updated on September 21, 2020 3:25 p.m."},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/comments?post=994"}],"version-history":[{"count":2,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/994\/revisions"}],"predecessor-version":[{"id":1750,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/994\/revisions\/1750"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media\/1228"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media?parent=994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/categories?post=994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/tags?post=994"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/topics?post=994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}