{"id":21018,"date":"2026-08-26T11:48:58","date_gmt":"2026-08-26T09:48:58","guid":{"rendered":"https:\/\/webhosting.de\/mysql-histograms-bessere-query-plaene-ohne-index-optimizer\/"},"modified":"2026-08-26T11:48:58","modified_gmt":"2026-08-26T09:48:58","slug":"mysql-histograms-better-query-plans-without-the-index-optimizer","status":"publish","type":"post","link":"https:\/\/webhosting.de\/en\/mysql-histograms-bessere-query-plaene-ohne-index-optimizer\/","title":{"rendered":"MySQL Histograms \u2013 Better Query Plans Without an Index"},"content":{"rendered":"<p><strong>MySQL Histograms<\/strong> provide the optimizer with real distribution data so that it can correctly estimate selectivities and generate faster query plans\u2014often even without an additional index. I\u2019ll show you how I set up and monitor histograms in MySQL 8+ using ANALYZE TABLE, and how I use them to make better decisions regarding joins, filters, and scans.<\/p>\n\n<h2>Key points<\/h2>\n<p><strong>Short Focus<\/strong>: The following bullet points outline what I pay particular attention to when using histograms.<\/p>\n<ul>\n  <li><strong>Selectivity<\/strong> Instead of gut feelings: more realistic cardinality estimates<\/li>\n  <li><strong>Without an index<\/strong> Faster: Better plan selection for skewed distributions<\/li>\n  <li><strong>types<\/strong> Understanding: Using Singleton vs. Equi-Height Strategically<\/li>\n  <li><strong>Buckets<\/strong> Taxes: Weigh the write-off against metadata costs<\/li>\n  <li><strong>Care<\/strong> At a Glance: Update, Check, and Delete if Necessary<\/li>\n<\/ul>\n\n<h2>Why Histograms Without an Index Are Effective<\/h2>\n<p>I use <strong>Histograms<\/strong>, because otherwise the optimizer often assumes a uniform distribution and consequently selects poor plans. A histogram represents the <strong>Distribution of Values<\/strong> It approximates a column and thus provides realistic selectivity estimates for predicates such as =, &gt;, BETWEEN, IN, or IS NULL. The optimizer then decides whether an index range scan, a table scan, or a join strategy using nested loops is more efficient. For example, if a condition matches only 0.1 % of the rows, I prefer a targeted access rather than a broad scan. If, on the other hand, a filter matches almost all rows, I avoid expensive index lookups that offer no benefit, thereby increasing the <strong>Efficiency<\/strong> every plan.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mysql-query-histograms-6793.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Histogram Types in MySQL 8.0<\/h2>\n<p>I distinguish between two <strong>types<\/strong>: Singleton and Equi-Height. Singleton histograms group frequently occurring individual values into separate buckets\u2014ideal for columns with a few dominant categories such as \u201eactive,\u201c \u201einactive,\u201c or \u201earchived.\u201c Equi-Height histograms divide the range of values so that each bucket contains a similar number of <strong>Lines<\/strong> ; this is suitable for continuous or skewed distributions such as prices, timestamps, or \u201egapped\u201c ID ranges. Both variants provide the optimizer with more accurate hit rates for filters. I always choose the type based on data characteristics, not personal preference.<\/p>\n\n<h2>Technical Fundamentals: Controlling Data Type Selection in MySQL<\/h2>\n<p>MySQL determines the specific <strong>Histogram Variation<\/strong> automatically based on the data distribution. In practice, this means: If the number of distinct values (NDV) is small enough relative to the number of buckets, the result is effectively a singleton histogram; otherwise, an equi-height histogram is generated. I therefore \u201echoose\u201c the type <em>indirect<\/em>, by specifying the appropriate column and a suitable number of buckets. For columns with very few but highly dominant categories, I deliberately set a small number of buckets to achieve singleton-like precision for these values. For finely distributed, continuous data, I increase the number of buckets incrementally until EXPLAIN returns the desired <strong>Selectivity<\/strong> reflects.<\/p>\n<p>Important: Histograms are <strong>single-column<\/strong>. You cannot directly represent dependencies between columns (e.g., status and country). In such cases, it helps to create a histogram for the most selective column and adjust the join order accordingly.<\/p>\n\n<h2>Choosing the Right Buckets<\/h2>\n<p>MySQL uses 100 by default <strong>Buckets<\/strong>, but allows 1 to 1024 using WITH N BUCKETS. More buckets increase resolution, but also increase metadata and the effort required for analysis. I usually start conservatively, measure the effect on EXPLAIN, and increase the number gradually if the plan still seems unsuitable. For highly concentrated values (e.g., 90 % in one status), a few buckets are often sufficient; for finely distributed prices or timestamps, more buckets are worthwhile. The goal is a reasonable <strong>Granularity<\/strong>, which has significantly reduced misjudgments without unnecessarily increasing the administrative burden.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mysql_histogramm_meeting_8123.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Practical Example: Workflow with ANALYZE TABLE<\/h2>\n<p>I follow a clear <strong>Workflow<\/strong>: First, I identify columns that frequently appear in WHERE or JOIN clauses and show clearly skewed distributions. Then I generate a histogram using `ANALYZE TABLE tbl UPDATE HISTOGRAM ON col WITH N BUCKETS;` and check it via `INFORMATION_SCHEMA.COLUMN_STATISTICS`. After data moves, I update the statistics again with `ANALYZE TABLE`. If a statistic is not appropriate, I remove it with `ANALYZE TABLE tbl DROP HISTOGRAM ON col;`. To evaluate the plan quality, I read <a href=\"https:\/\/webhosting.de\/en\/interpreting-mysql-explain-and-analyze-queries-query-tuning\/\">Interpreting EXPLAIN ANALYZE<\/a> and compare estimates with actual figures <strong>Lines<\/strong> from.<\/p>\n\n<h2>Specific Orders and Control<\/h2>\n<p>I follow a reproducible process consisting of a few clear steps and verify the generated JSON statistics.<\/p>\n<pre><code>-- Create histograms on individual columns\nANALYZE TABLE orders UPDATE HISTOGRAM ON status WITH 32 BUCKETS;\nANALYZE TABLE orders UPDATE HISTOGRAM ON created_at WITH 128 BUCKETS;\n\n-- Multiple columns in a single run with the same number of buckets\nANALYZE TABLE orders UPDATE HISTOGRAM ON status, payment_method WITH 64 BUCKETS;\n\n-- Deleting specific histograms\nANALYZE TABLE orders DROP HISTOGRAM ON status;\n<\/code><\/pre>\n<pre><code>-- Visual inspection of the statistics\nSELECT\n  SCHEMA_NAME, TABLE_NAME, COLUMN_NAME,\n  JSON_PRETTY(HISTOGRAM) AS histogram\nFROM INFORMATION_SCHEMA.COLUMN_STATISTICS\nWHERE SCHEMA_NAME = DATABASE()\n  AND TABLE_NAME = 'orders'\n  AND COLUMN_NAME IN ('status','created_at');\n<\/code><\/pre>\n<p>I evaluate the impact immediately using EXPLAIN ANALYZE:<\/p>\n<pre><code>EXPLAIN ANALYZE\nSELECT *\nFROM orders\nWHERE status = 'canceled'\n  AND created_at &gt;= NOW() - INTERVAL 7 DAY;\n<\/code><\/pre>\n<p>Does the estimate improve? <strong>rows<\/strong> If there is a noticeable change\u2014for example, if the plan switches from a full scan to an index-range scan or changes the join order\u2014the adjustment was successful. If the deviation remains large, I increase or decrease the number of buckets and compare the results again.<\/p>\n\n<h2>Example: Order Status and Rare Values<\/h2>\n<p>In an \u201eorders\u201c table, the \u201ecompleted\u201c status often dominates, while \u201epending\u201c is moderately common and \"canceled\" is very rare; this <strong>Imbalance<\/strong> Without a histogram, this can easily lead to incorrect selectivities. If an API queries for \u201ecanceled,\u201c the optimizer may incorrectly choose a full table scan even though a narrow index access would suffice. With a singleton histogram, MySQL recognizes that \u201ecanceled\u201c accounts for only a tiny fraction of the data and switches to an index range scan or optimizes the join order. This reduces latency, and I don\u2019t need an additional index for every <strong>Variant<\/strong> of a filter. In dashboards with strict SLOs, this adjustment often results in noticeable performance improvements.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mysql-histograms-server-room-2973.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Time Series and Timestamps<\/h2>\n<p>With time series, there are many <strong>Accesses<\/strong> based on fresh data; older time windows usually remain inactive. An equi-height histogram on `created_at` or `updated_at` distinguishes heavily trafficked time periods from rarely used ones. The optimizer then correctly assesses whether a range scan is appropriate or whether a table scan would achieve the goal more quickly. Especially with partial time filters applied to large tables, I notice significant changes in execution plans and lower I\/O costs. I consider the <strong>Statistics<\/strong> Updates are more frequent here because the focus shifts with day-to-day operations.<\/p>\n\n<h2>Partitions, Data Types, and Collations<\/h2>\n<p>I examine the data distribution on partitioned tables <strong>across all partitions<\/strong>. Significant variations (e.g., by month) can smooth out global histograms. If individual partitions are extremely selective or extremely broad, I also test using partition-pruning filters in the WHERE clause to see if the execution plan quality is still acceptable. Overall, I make sure to formulate filters in such a way that MySQL can identify partitions early on <strong>exclude<\/strong> can.<\/p>\n<p>Histograms work best with scalar, comparable data types (numbers, date\/time values, VARCHAR\/CHAR with the appropriate collation). For <strong>LOB\/JSON Data<\/strong> I tend to rely on <em>Generated Columns<\/em> with extracted, typed values, and, if necessary, supplement them with histograms or indices. For strings, the <strong>Collation<\/strong> The comparison logic; depending on the collation, values may match (e.g., case-sensitive). I keep the collation consistent with the queries to obtain realistic selectivities.<\/p>\n\n<h2>Limits and Missteps<\/h2>\n<p>Histograms are particularly useful for estimating individual columns with <strong>Constants<\/strong> Good; however, they can only represent multi-column dependencies to a limited extent. They reach their limits with highly correlated columns or dynamic parameters (e.g., those populated by the application). Boolean fields or columns with a nearly uniform distribution rarely benefit from additional statistics. On the other hand, too many buckets and excessive maintenance can increase administrative and analysis time. I therefore use histograms selectively and regularly check the <strong>Effect<\/strong> based on actual designs.<\/p>\n\n<h2>Optimizer Check and Update<\/h2>\n<p>I check the <strong>Use<\/strong> from histograms via ANALYZE TABLE and relevant optimizer options, so that the planner can make effective use of the statistics. In high-traffic systems, I schedule updates during quiet time windows or in batches after large data loads. Before and after, I compare EXPLAIN and EXPLAIN ANALYZE outputs to evaluate changes in join sequences, filter steps, and cost models. If there are negative effects, I react immediately and roll back a statistic. For further control of the <a href=\"https:\/\/webhosting.de\/en\/mysql-optimizer-query-hosting-optimization-serverboost\/\">Optimizer Options<\/a> I make sure that dependencies on other statistics do not go unnoticed and cause incorrect <strong>Assumptions<\/strong> produce.<\/p>\n\n<h2>Monitoring, Regression Protection, and Playbook<\/h2>\n<p>I'm building a lightweight <strong>Playbook<\/strong> For production use:<\/p>\n<ul>\n  <li>Set a baseline: Before making any changes, run EXPLAIN ANALYZE to record the execution time, \u201erows examined,\u201c and handler count.<\/li>\n  <li>Create\/modify histogram: focus on the filter columns, conservative buckets.<\/li>\n  <li>Measure immediately afterward: plan, estimated vs. actual lines; a deviation factor of &gt;10 is a red flag for me.<\/li>\n  <li>Fine-tuning: Move buckets up or down; if necessary, adjust the filter order in the query.<\/li>\n  <li>Have a rollback ready: DROP HISTOGRAM if latency increases.<\/li>\n  <li>Automation: Run ANALYZE during maintenance windows after ETL loads or large DML batches.<\/li>\n<\/ul>\n<p>To analyze the causes, I use <strong>Optimizer Traces<\/strong> and EXPLAIN ANALYZE to determine whether the optimizer is bringing the correct selective table \u201eto the front\u201c based on the histograms. For A\/B testing, I experimentally fix the join order (STRAIGHT_JOIN) or enable\/disable individual indexes to evaluate the effect of the statistics in isolation.<\/p>\n<p>From an organizational standpoint, a short one works well <strong>Change-Log<\/strong> For each table: column, number of buckets, time, and before\/after measurement values. This makes it easier to make corrections later and prevents ambiguous interactions.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mysql_histogram_techoffice_4829.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Operational Aspects: Blocking, Costs, Portability<\/h2>\n<p>ANALYZE TABLE performs a <strong>Metadata Lock<\/strong> on the table, but it does not permanently block normal read\/write operations. For very large tables, I allow for enough time; histogram generation uses sampling and is memory-limited (keyword: internal working memory for the calculation). The space required for the statistics themselves remains moderate: a few dozen to a few hundred kilobytes per column with 100\u2013256 buckets is a realistic estimate. Still, I calculate the total, because many columns multiplied by many tables result in <strong>visible metadata<\/strong>.<\/p>\n<p>At <strong>Logical Dumps<\/strong> (mysqldump) does not include histograms in the data; after a restore, I deliberately recreate them. They are preserved during an in-place upgrade. On the server side, I need sufficient privileges for `ANALYZE TABLE` on the respective objects; in strictly regulated environments, I integrate this maintenance into maintenance pipelines.<\/p>\n\n<h2>When Histograms Are Useless<\/h2>\n<p>I'll skip <strong>Histograms<\/strong> for columns that have very few values and can be estimated accurately anyway. Even where a good index already covers minimal sets of results, a histogram rarely provides any additional benefit. Uniform distributions do not require complex, fine-grained analysis. In highly dynamic, write-intensive systems, maintenance can create unnecessary load if I trigger it too frequently. In such situations, I use the <strong>Energy<\/strong> I'd rather focus on index strategies, query design, and caching.<\/p>\n\n<h2>Cheat Sheet in Table Format<\/h2>\n<p>I use the following <strong>Overview<\/strong> For quick decisions: Which histogram type is appropriate, how do I set buckets, and what are the associated costs? The table serves as a reference guide when reviewing problematic queries. I update it based on insights gained from EXPLAIN ANALYZE and production metrics. In doing so, I keep in mind that data distributions change and historical assumptions become outdated. The key is to <strong>Plan Quality<\/strong> to confirm this with actual measurements.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Aspect<\/th>\n      <th>Recommendation<\/th>\n      <th>Benefit<\/th>\n      <th>trade-off<\/th>\n      <th>Example<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Type<\/td>\n      <td>Singleton with a few dominant values<\/td>\n      <td>Exact hit rates for common categories<\/td>\n      <td>Not very helpful for continuous areas<\/td>\n      <td>order_status<\/td>\n    <\/tr>\n    <tr>\n      <td>Type<\/td>\n      <td>Equi-Height for Skewed, Continuous Data<\/td>\n      <td>Better estimation across the range of values<\/td>\n      <td>More metadata for many buckets<\/td>\n      <td>created_at, price<\/td>\n    <\/tr>\n    <tr>\n      <td>Buckets<\/td>\n      <td>Start at 100, then adjust<\/td>\n      <td>Balanced resolution<\/td>\n      <td>Higher processing and memory load at 512\u20131024<\/td>\n      <td>WITH 100 BUCKETS<\/td>\n    <\/tr>\n    <tr>\n      <td>Care<\/td>\n      <td>After making major changes to the data, run ANALYZE<\/td>\n      <td>Current Selectivities<\/td>\n      <td>Schedule a maintenance window<\/td>\n      <td>ANALYZE TABLE \u2026 UPDATE HISTOGRAM<\/td>\n    <\/tr>\n    <tr>\n      <td>Control<\/td>\n      <td>Check using COLUMN_STATISTICS<\/td>\n      <td>Transparency and Auditing<\/td>\n      <td>JSON parsing required<\/td>\n      <td>INFORMATION_SCHEMA.COLUMN_STATISTICS<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>How it fits into the overall tuning picture<\/h2>\n<p>I treat <strong>Histograms<\/strong> as a building block alongside indexes, query design, caching, and hardware parameters. Often, a good histogram reorders joins, reduces I\/O, and ensures consistent response times. Nevertheless, it does not replace sound indexing strategies or an efficient schema. Those who take a closer look at query planning decisions will benefit from <a href=\"https:\/\/webhosting.de\/en\/database-query-execution-plans-hosting-optimization-performance-insights\/\">Understanding Execution Plans<\/a> and compares cost models with actual durations. I regularly check whether the <strong>Workloads<\/strong> whether they still align with the statistics or if adjustments are needed.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mysql-queryplanung-8216.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Advanced Join Scenarios<\/h2>\n<p>Histograms are particularly useful when multiple tables with filters are involved. Example:<\/p>\n<pre><code>SELECT o.id, o.amount\nFROM users u\nJOIN orders o ON o.user_id = u.id\nWHERE u.country = 'DE'\n  AND o.status = 'canceled'\n  AND o.created_at &gt;= NOW() - INTERVAL 30 DAY;\n<\/code><\/pre>\n<p>Without histograms, the optimizer may underestimate the selectivity of o.status=\u2019canceled\u2018 or overestimate the proportion of German users. With a histogram on <em>u.country<\/em> and <em>status not specified<\/em> (if applicable, also on <em>o.created_at<\/em>) the planner usually recognizes that the combination is extremely selective. In practice, I then see that MySQL first determines the smaller subset (e.g., via an index on users(country) or orders(status, created_at)) and only then performs the join\u2014instead of scanning the large table. This saves on I\/O, buffer usage, and CPU resources, and stabilizes latency even under load.<\/p>\n<p>Because histograms only <strong>single-column<\/strong> Index strategies remain important: A composite index on (status, created_at) can further speed up the range scan. The histogram primarily ensures that the optimizer uses this <em>Strategy<\/em> considers to be inexpensive at all.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mysql_histogram_desk_4721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Summary for practice<\/h2>\n<p>I set <strong>MySQL<\/strong>-I use histograms when the optimizer gets it wrong using default statistics and skewed distributions produce incorrect execution plans. With `ANALYZE TABLE`, I build, update, and remove statistics specifically on the columns that dominate filters and joins. I choose between Singleton and Equi-Height based on the data, and I calibrate the number of buckets using performance measurements. I use EXPLAIN ANALYZE to verify that join orders, filter positions, and scans change as intended. This way, I achieve significant improvements with minimal <strong>Overhead<\/strong> Noticeably faster queries\u2014often without the need for additional indexes.<\/p>","protected":false},"excerpt":{"rendered":"<p>Learn how MySQL histograms provide the optimizer with accurate optimizer statistics, enable better query plans, and significantly improve your SQL tuning without requiring additional indexes.<\/p>","protected":false},"author":1,"featured_media":21011,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[781],"tags":[],"class_list":["post-21018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-datenbanken-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"112","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"MySQL Histograms","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21011","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts\/21018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/comments?post=21018"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts\/21018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/media\/21011"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/media?parent=21018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/categories?post=21018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/tags?post=21018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}