{"id":2397,"date":"2020-10-26T07:00:00","date_gmt":"2020-10-26T04:00:00","guid":{"rendered":"https:\/\/www.dataplatform.gr\/?p=2397"},"modified":"2024-07-01T17:51:46","modified_gmt":"2024-07-01T14:51:46","slug":"pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat","status":"publish","type":"post","link":"https:\/\/www.dataplatform.gr\/en\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/","title":{"rendered":"How to force a plan in SQL Server and why not"},"content":{"rendered":"<p>Sometimes a query may run with a different value depending on the value we have given to a parameter <strong>plan <\/strong>(<strong>execution plan<\/strong>) and have a different duration. This phenomenon is called <strong>parameter sniffing<\/strong>. This may be due to<strong> different number of records<\/strong> of the result, in <strong>outdated statistics<\/strong> or in not using a correct one <strong>non-clustered index<\/strong>. In the article we will see how we can do it <strong>force <\/strong>a shot on a procedure or a sql statement and why we usually shouldn&#039;t do it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u03c4\u03b9-\u03b5\u03af\u03bd\u03b1\u03b9-\u03c4\u03bf-parameter-sniffing\">What is parameter sniffing?<\/h2>\n\n\n\n<p><strong>Parameter sniffing<\/strong> is called the SQL Server process that when we run a procedure or an sql statement it accepts <strong>an unknown parameter<\/strong>, reads it in order to create <strong>a shot <\/strong>according to the price we have set. Where is the problem; That depending on the parameter, the query can return 1 row or 100,000 and SQL Server will use the plan that was made with the first parameter it received. This will cause the second query to run with <strong>non-efficient (optimized) way<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u03c0\u03bf\u03b9\u03b1-\u03b5\u03af\u03bd\u03b1\u03b9-\u03b7-\u03bb\u03cd\u03c3\u03b7\">What is the solution<\/h2>\n\n\n\n<p> The solution could be to do <strong>recompile<\/strong> the plan every time but it would lead to high usage <strong>cpu <\/strong>along with high memory usage. This would happen because with each parameter another plan would be created which would take up space in <strong>cache<\/strong>. We could also use <strong>query hint<\/strong> with the command to optimize according to another parameter so that the plan of the specific parameter is always used.<\/p>\n\n\n\n<p>Sometimes the problem is due to <strong>statistics<\/strong>, as when statistics were taken on the table, the table had a different number of records than when the query was executed.<\/p>\n\n\n\n<p>Finally, the problem could be the lack of a correct one <strong>non-clustered index<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"force-it-hard-way-a-k-a-plan-guides\">Force it hard way aka Plan Guides!<\/h2>\n\n\n\n<p>If for some reason we can&#039;t mess with our code in the application or we don&#039;t have permission to add our own indexes and we want a solution right away there is a way. The use <strong>Plan Guides<\/strong>!<\/p>\n\n\n\n<p>Plan Guides allow us to do <strong>optimize <\/strong>queries without messing with their code. <\/p>\n\n\n\n<p>We have 3 categories of Plan Guides:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Object<\/strong>: To optimize queries inside a Stored Procedure.<\/li>\n\n\n\n<li><strong>Template<\/strong>: To optimize stand-alone queries that accept parameters.<\/li>\n\n\n\n<li><strong>SQL<\/strong>: To optimize in stand-alone queries its execution mode.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1\">Example<\/h2>\n\n\n\n<p>The example will be on its trial basis <strong>Microsoft <\/strong><a href=\"https:\/\/go.microsoft.com\/fwlink\/?LinkID=800630\" target=\"_blank\" rel=\"noreferrer noopener\">WideWorldImporters<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u03c3\u03c4\u03b7\u03bd-\u03c0\u03b5\u03c1\u03af\u03c0\u03c4\u03c9\u03c3\u03b7-stored-procedure-\u03c0\u03bf\u03c5-\u03b4\u03ad\u03c7\u03b5\u03c4\u03b1\u03b9-\u03bc\u03af\u03b1-\u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\">In the case of a stored procedure that accepts one parameter<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">use WideWorldImporters;\ngo\n\n\ncreate procedure sp_orders\n\t@stockitemid INT\nas\n\n\tselect\n\t\to.customerid,\n\t\tsum(ol.quantity*ol.unitprice)\n\tfrom sales.orders o\n\tinner join sales.orderlines ol on o.orderid=ol.orderid\n\twhere ol.stockitemid=@stockitemid\n\tgroup by o.customerid\n\torder by o.customerid asc;\ngo\n<\/pre>\n\n\n\n<p>We run the procedure twice with a different parameter and with the option <strong>set statistics xml on <\/strong>he will also bring us the plan of each one.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">set statistics xml on;\nGO\n\nsp_orders 90 with recompile;\nGO\nsp_orders 224 with recompile;\nGO\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"787\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-01-1024x787.png\" alt=\"\" class=\"wp-image-2398\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-01-1024x787.png 1024w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-01-300x231.png 300w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-01-768x590.png 768w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-01.png 1388w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We see with a compare that for the same query even though we did <strong>recompile <\/strong>he came to us with a different plan.<\/p>\n\n\n\n<p>After we decide which of the two plans covers us for both cases we will make it <strong>Plan Guide<\/strong>.<\/p>\n\n\n\n<p>Since it is a stored procedure we will define as <strong><em>type=&#039;OBJECT&#039;<\/em>,<\/strong> in the <em>stmt <\/em>the query and at <em>hints<\/em> we will add it <strong>query hint<\/strong> which will always make the query run with the plan it would have if the value was 90 *.<\/p>\n\n\n\n<p>* <em>In case we do not know which value covers the maximum performance in most executions of the query. Instead of putting the value itself as an option, we can set it <code>OPTION<\/code> <code>(OPTIMIZE FOR<\/code> <code>UNKNOWN)<\/code> which will use the statistics data to create a &quot;moderate&quot; plan that will try to cover all the values it has received.<\/em> But it may not be efficient enough.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">EXEC sp_create_plan_guide   \n    @name =  N'planguide_orders',  \n    @stmt = N'select\n\t\to.customerid,\n\t\tsum(ol.quantity*ol.unitprice)\n\tfrom sales.orders o\n\tinner join sales.orderlines ol on o.orderid=ol.orderid\n\twhere ol.stockitemid=@stockitemid\n\tgroup by o.customerid\n\torder by o.customerid asc',\n    @type = N'OBJECT',  \n    @module_or_batch = N'sp_orders',  \n    @params = NULL,  \n    @hints = N'OPTION (optimize for (@stockitemid = 90))'; <\/pre>\n\n\n\n<p>After creating it we try the same execution again.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">sp_orders 90 with recompile;\nGO\nsp_orders 224 with recompile;\nGO<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"784\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-02-1024x784.png\" alt=\"\" class=\"wp-image-2399\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-02-1024x784.png 1024w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-02-300x230.png 300w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-02-768x588.png 768w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-02.png 1388w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>This time we will see that the plan remained the same as it was with the execution with a value of 90.<\/p>\n\n\n\n<p>If we open it <strong>XML <\/strong>of the plan we will see that it mentions that it made use of the planguide_orders we made before.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"121\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-04.png\" alt=\"\" class=\"wp-image-2403\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-04.png 602w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-04-300x60.png 300w\" sizes=\"auto, (max-width: 602px) 100vw, 602px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u03c3\u03c4\u03b7\u03bd-\u03c0\u03b5\u03c1\u03af\u03c0\u03c4\u03c9\u03c3\u03b7-stand-alone-query-\u03bc\u03b5-\u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\">In the case of a stand-alone query with a parameter<\/h4>\n\n\n\n<p>We will execute it <em>sp_get_query_template<\/em> so that the query we know with values is split as SQL Server knows it with the SQLStatement and the parameter name.<\/p>\n\n\n\n<p>Also in the query hint we will define <strong>parameterization forced<\/strong> so that whatever parameter we have given to the query will run with the plan it has with the value 90.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">DECLARE @SQLStatement NVARCHAR(MAX);\nDECLARE @Parameters NVARCHAR(MAX);\nEXEC sp_get_query_template \n    N'select\n\t\to.customerid,\n\t\tsum(ol.quantity*ol.unitprice)\n\tfrom sales.orders o\n\tinner join sales.orderlines ol on o.orderid=ol.orderid\n\twhere ol.stockitemid=90\n\tgroup by o.customerid\n\torder by o.customerid asc',\n\t@SQLStatement OUTPUT,\n\t@Parameters OUTPUT\n\t  \nEXEC sp_create_plan_guide   \n    @name =  N'planguide_orders_2',  \n\t@stmt = @SQLStatement,\n    @type = N'TEMPLATE',  \n    @module_or_batch = NULL,  \n    @params = @Parameters,  \n    @hints = N'OPTION (PARAMETERIZATION FORCED)'; <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u03c0\u03c9\u03c2-\u03b2\u03c1\u03af\u03c3\u03ba\u03bf\u03c5\u03bc\u03b5-\u03c4\u03b1-plan-guides-\u03c0\u03bf\u03c5-\u03ad\u03c7\u03bf\u03c5\u03bc\u03b5\">How do we find the Plan Guides we have?<\/h2>\n\n\n\n<p>There is the system view <em>sys.plan_guides<\/em> which contains all the Plan Guides. We can delete a specific one or all at a moment&#039;s notice.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">select * from sys.plan_guides;<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"95\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-05.png\" alt=\"\" class=\"wp-image-2404\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-05.png 889w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-05-300x32.png 300w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/fp-05-768x82.png 768w\" sizes=\"auto, (max-width: 889px) 100vw, 889px\" \/><\/figure>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">sp_control_plan_guide 'DROP', 'planguide_orders_2'\nsp_control_plan_guide 'DROP ALL';\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u03c4\u03b9-\u03c0\u03c1\u03ad\u03c0\u03b5\u03b9-\u03bd\u03b1-\u03c0\u03c1\u03bf\u03c3\u03ad\u03be\u03bf\u03c5\u03bc\u03b5-\u03bc\u03b5-\u03c4\u03b7-\u03c7\u03c1\u03ae\u03c3\u03b7-plan-guides\">What to watch out for when using Plan Guides<\/h2>\n\n\n\n<p>You have to <strong>SQL text to be exactly the same<\/strong>, if the query is written differently or even a simple space above it will not work. In the event that the query may come to us with a different text, we must create a second Plan Guide.<\/p>\n\n\n\n<p>The query optimizer usually knows what the best plan is. By doing it we force may have the same plan but on average perform worse. <\/p>\n\n\n\n<p>In addition, the data may change over time and we may have an outdated bad plan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u03c0\u03b7\u03b3\u03ad\u03c2\">Sources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/performance\/plan-guides?view=sql-server-ver15\" target=\"_blank\" rel=\"noreferrer noopener\">Plan Guides<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.brentozar.com\/archive\/2013\/06\/the-elephant-and-the-mouse-or-parameter-sniffing-in-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">The Elephant and the Mouse, or, Parameter Sniffing in SQL Server<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.sqlskills.com\/blogs\/erin\" target=\"_blank\" rel=\"noreferrer noopener\">www.sqlskills.com\/blogs\/erin<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Sometimes, depending on the value we have given to a parameter, a query may run with a different plan (execution plan) and have a different duration. This phenomenon is called parameter sniffing. This may be due to a different number of records of the result, outdated statistics or not using a correct non-clustered index. [\u2026]<\/p>","protected":false},"author":1,"featured_media":702,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,15],"tags":[128,23,48,127,6],"class_list":["post-2397","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-databases","category-ms-sqlserver","tag-force-plan","tag-microsoft","tag-performance_tuning","tag-plan-guides","tag-sqlserver"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 - DataPlatform.gr<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dataplatform.gr\/en\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 - DataPlatform.gr\" \/>\n<meta property=\"og:description\" content=\"\u039a\u03ac\u03c0\u03bf\u03b9\u03b5\u03c2 \u03c6\u03bf\u03c1\u03ad\u03c2 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c4\u03cd\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1 query \u03b1\u03bd\u03ac\u03bb\u03bf\u03b3\u03b1 \u03c4\u03b7\u03bd \u03c4\u03b9\u03bc\u03ae \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 \u03b4\u03ce\u03c3\u03b5\u03b9 \u03c3\u03b5 \u03bc\u03b9\u03b1 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf \u03bd\u03b1 \u03c4\u03c1\u03ad\u03c7\u03b5\u03b9 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03bd\u03bf (execution plan) \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03ae \u03b4\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1. \u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c6\u03b1\u03b9\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03bf\u03bd\u03bf\u03bc\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 parameter sniffing. \u0391\u03c5\u03c4\u03cc \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03bf\u03c6\u03b5\u03af\u03bb\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ce\u03bd \u03c4\u03bf\u03c5 \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03ad\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2, \u03c3\u03b5 outdated statistics \u03ae \u03c3\u03c4\u03b7 \u03bc\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03b5\u03bd\u03cc\u03c2 \u03c3\u03c9\u03c3\u03c4\u03bf\u03cd non-clustered index. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dataplatform.gr\/en\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/\" \/>\n<meta property=\"og:site_name\" content=\"DataPlatform.gr\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dataplatform.gr\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-26T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-01T14:51:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_sqlserver.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Stratos Matzouranis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stratos Matzouranis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/\"},\"author\":{\"name\":\"Stratos Matzouranis\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/person\\\/e87bf4fd02b65cb6aa0942f87245bbaf\"},\"headline\":\"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5\",\"datePublished\":\"2020-10-26T04:00:00+00:00\",\"dateModified\":\"2024-07-01T14:51:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/\"},\"wordCount\":155,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_sqlserver.png\",\"keywords\":[\"Force Plan\",\"Microsoft\",\"Performance Tuning\",\"Plan Guides\",\"SQL Server\"],\"articleSection\":[\"Databases\",\"Microsoft SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/\",\"name\":\"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 - DataPlatform.gr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_sqlserver.png\",\"datePublished\":\"2020-10-26T04:00:00+00:00\",\"dateModified\":\"2024-07-01T14:51:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_sqlserver.png\",\"contentUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_sqlserver.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0391\u03c1\u03c7\u03b9\u03ba\u03ae\",\"item\":\"https:\\\/\\\/www.dataplatform.gr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Databases\",\"item\":\"https:\\\/\\\/www.dataplatform.gr\\\/category\\\/databases\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Microsoft SQL Server\",\"item\":\"https:\\\/\\\/www.dataplatform.gr\\\/category\\\/databases\\\/ms-sqlserver\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#website\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/\",\"name\":\"dataplatform.gr - Sky is not the limit!\",\"description\":\"\u0398\u03b5\u03c9\u03c1\u03af\u03b1, \u03bf\u03b4\u03b7\u03b3\u03bf\u03af \u03ba\u03b1\u03b9 \u03c3\u03ba\u03ad\u03c8\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03b4\u03bf\u03c5\u03bb\u03b5\u03b9\u03ac \u03c3\u03b1\u03c2 \u03c0\u03b9\u03bf \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ac \u03ba\u03b1\u03b9 \u03c0\u03b9\u03bf \u03b5\u03cd\u03ba\u03bf\u03bb\u03b1 \u03c0\u03ac\u03bd\u03c9 \u03c3\u03c4\u03b9\u03c2 \u03b2\u03ac\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd, \u03c3\u03c4\u03b7\u03bd SQL, \u03c3\u03c4\u03bf Business Intelligence \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03b3\u03b5\u03bd\u03b9\u03ba\u03cc\u03c4\u03b5\u03c1\u03b1.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dataplatform.gr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#organization\",\"name\":\"dataplatform.gr\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_logo_wbacki.png\",\"contentUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_logo_wbacki.png\",\"width\":322,\"height\":139,\"caption\":\"dataplatform.gr\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dataplatform.gr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dataplatform-gr\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/person\\\/e87bf4fd02b65cb6aa0942f87245bbaf\",\"name\":\"Stratos Matzouranis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g\",\"caption\":\"Stratos Matzouranis\"},\"sameAs\":[\"https:\\\/\\\/www.dataplatform.gr\"],\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/en\\\/author\\\/stratos-matzouranis\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 - DataPlatform.gr","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:\/\/www.dataplatform.gr\/en\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/","og_locale":"en_US","og_type":"article","og_title":"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 - DataPlatform.gr","og_description":"\u039a\u03ac\u03c0\u03bf\u03b9\u03b5\u03c2 \u03c6\u03bf\u03c1\u03ad\u03c2 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c4\u03cd\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1 query \u03b1\u03bd\u03ac\u03bb\u03bf\u03b3\u03b1 \u03c4\u03b7\u03bd \u03c4\u03b9\u03bc\u03ae \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 \u03b4\u03ce\u03c3\u03b5\u03b9 \u03c3\u03b5 \u03bc\u03b9\u03b1 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf \u03bd\u03b1 \u03c4\u03c1\u03ad\u03c7\u03b5\u03b9 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03bd\u03bf (execution plan) \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03ae \u03b4\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1. \u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c6\u03b1\u03b9\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03bf\u03bd\u03bf\u03bc\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 parameter sniffing. \u0391\u03c5\u03c4\u03cc \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03bf\u03c6\u03b5\u03af\u03bb\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ce\u03bd \u03c4\u03bf\u03c5 \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03ad\u03c3\u03bc\u03b1\u03c4\u03bf\u03c2, \u03c3\u03b5 outdated statistics \u03ae \u03c3\u03c4\u03b7 \u03bc\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03b5\u03bd\u03cc\u03c2 \u03c3\u03c9\u03c3\u03c4\u03bf\u03cd non-clustered index. [&hellip;]","og_url":"https:\/\/www.dataplatform.gr\/en\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/","og_site_name":"DataPlatform.gr","article_publisher":"https:\/\/www.facebook.com\/dataplatform.gr\/","article_published_time":"2020-10-26T04:00:00+00:00","article_modified_time":"2024-07-01T14:51:46+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_sqlserver.png","type":"image\/png"}],"author":"Stratos Matzouranis","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Stratos Matzouranis","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#article","isPartOf":{"@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/"},"author":{"name":"Stratos Matzouranis","@id":"https:\/\/www.dataplatform.gr\/#\/schema\/person\/e87bf4fd02b65cb6aa0942f87245bbaf"},"headline":"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5","datePublished":"2020-10-26T04:00:00+00:00","dateModified":"2024-07-01T14:51:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/"},"wordCount":155,"commentCount":0,"publisher":{"@id":"https:\/\/www.dataplatform.gr\/#organization"},"image":{"@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_sqlserver.png","keywords":["Force Plan","Microsoft","Performance Tuning","Plan Guides","SQL Server"],"articleSection":["Databases","Microsoft SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/","url":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/","name":"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 - DataPlatform.gr","isPartOf":{"@id":"https:\/\/www.dataplatform.gr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#primaryimage"},"image":{"@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_sqlserver.png","datePublished":"2020-10-26T04:00:00+00:00","dateModified":"2024-07-01T14:51:46+00:00","breadcrumb":{"@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#primaryimage","url":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_sqlserver.png","contentUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_sqlserver.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/www.dataplatform.gr\/pos-kanoyme-force-ena-plano-ston-sql-server-kai-giat\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0391\u03c1\u03c7\u03b9\u03ba\u03ae","item":"https:\/\/www.dataplatform.gr\/"},{"@type":"ListItem","position":2,"name":"Databases","item":"https:\/\/www.dataplatform.gr\/category\/databases\/"},{"@type":"ListItem","position":3,"name":"Microsoft SQL Server","item":"https:\/\/www.dataplatform.gr\/category\/databases\/ms-sqlserver\/"},{"@type":"ListItem","position":4,"name":"\u03a0\u03ce\u03c2 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5 force \u03ad\u03bd\u03b1 \u03c0\u03bb\u03ac\u03bd\u03bf \u03c3\u03c4\u03bf\u03bd SQL Server \u03ba\u03b1\u03b9 \u03b3\u03b9\u03b1\u03c4\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03c4\u03bf \u03ba\u03ac\u03bd\u03bf\u03c5\u03bc\u03b5"}]},{"@type":"WebSite","@id":"https:\/\/www.dataplatform.gr\/#website","url":"https:\/\/www.dataplatform.gr\/","name":"dataplatform.gr - Sky is not the limit!","description":"\u0398\u03b5\u03c9\u03c1\u03af\u03b1, \u03bf\u03b4\u03b7\u03b3\u03bf\u03af \u03ba\u03b1\u03b9 \u03c3\u03ba\u03ad\u03c8\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03b4\u03bf\u03c5\u03bb\u03b5\u03b9\u03ac \u03c3\u03b1\u03c2 \u03c0\u03b9\u03bf \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ac \u03ba\u03b1\u03b9 \u03c0\u03b9\u03bf \u03b5\u03cd\u03ba\u03bf\u03bb\u03b1 \u03c0\u03ac\u03bd\u03c9 \u03c3\u03c4\u03b9\u03c2 \u03b2\u03ac\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd, \u03c3\u03c4\u03b7\u03bd SQL, \u03c3\u03c4\u03bf Business Intelligence \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03b3\u03b5\u03bd\u03b9\u03ba\u03cc\u03c4\u03b5\u03c1\u03b1.","publisher":{"@id":"https:\/\/www.dataplatform.gr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dataplatform.gr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dataplatform.gr\/#organization","name":"dataplatform.gr","url":"https:\/\/www.dataplatform.gr\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dataplatform.gr\/#\/schema\/logo\/image\/","url":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_logo_wbacki.png","contentUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_logo_wbacki.png","width":322,"height":139,"caption":"dataplatform.gr"},"image":{"@id":"https:\/\/www.dataplatform.gr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dataplatform.gr\/","https:\/\/www.linkedin.com\/company\/dataplatform-gr\/"]},{"@type":"Person","@id":"https:\/\/www.dataplatform.gr\/#\/schema\/person\/e87bf4fd02b65cb6aa0942f87245bbaf","name":"Stratos Matzouranis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g","caption":"Stratos Matzouranis"},"sameAs":["https:\/\/www.dataplatform.gr"],"url":"https:\/\/www.dataplatform.gr\/en\/author\/stratos-matzouranis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts\/2397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/comments?post=2397"}],"version-history":[{"count":1,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts\/2397\/revisions"}],"predecessor-version":[{"id":5782,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts\/2397\/revisions\/5782"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/media\/702"}],"wp:attachment":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/media?parent=2397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/categories?post=2397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/tags?post=2397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}