{"id":5102,"date":"2021-05-23T19:43:26","date_gmt":"2021-05-23T22:43:26","guid":{"rendered":"https:\/\/blog.clusterweb.com.br\/?p=5102"},"modified":"2021-05-23T19:46:09","modified_gmt":"2021-05-23T22:46:09","slug":"como-usar-o-explain-para-perfilar-o-desempenho-da-consulta-no-banco-de-dados-do-azure-para-mariadb","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=5102","title":{"rendered":"Como usar o EXPLAIN para perfilar o desempenho da consulta no Banco de Dados do Azure para MariaDB"},"content":{"rendered":"<p><strong>EXPLAIN<\/strong>\u00a0\u00e9 uma ferramenta \u00fatil para otimizar consultas. A instru\u00e7\u00e3o EXPLAIN pode ser utilizada para obter informa\u00e7\u00f5es sobre como as instru\u00e7\u00f5es SQL s\u00e3o executadas. A sa\u00edda a seguir mostra um exemplo da execu\u00e7\u00e3o de uma instru\u00e7\u00e3o EXPLAIN.<\/p>\n<div id=\"code-try-0\" class=\"codeHeader\" data-bi-name=\"code-header\">\n<p><span class=\"language\">SQL<\/span><\/p>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; EXPLAIN SELECT * FROM tb1 WHERE id=100\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 995789 filtered: 10.00 Extra: Using where \">mysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> * <span class=\"hljs-keyword\">FROM<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> <span class=\"hljs-keyword\">id<\/span>=<span class=\"hljs-number\">100<\/span>\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">ALL<\/span>\r\npossible_keys: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">key<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n      key_len: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">995789<\/span>\r\n     filtered: <span class=\"hljs-number\">10.00<\/span>\r\n        Extra: <span class=\"hljs-keyword\">Using<\/span> <span class=\"hljs-keyword\">where<\/span>\r\n<\/code><\/pre>\n<p><!--more--><\/p>\n<p>Como pode ser observado a partir desse exemplo, o valor da\u00a0<em>chave<\/em>\u00a0\u00e9 NULL. Essa sa\u00edda significa que o MariaDB n\u00e3o pode encontrar nenhum \u00edndice otimizado para a consulta e executa uma verifica\u00e7\u00e3o de tabela. Vamos otimizar essa consulta, adicionando um \u00edndice na coluna\u00a0<strong>ID<\/strong>.<\/p>\n<div id=\"code-try-1\" class=\"codeHeader\" data-bi-name=\"code-header\"><span class=\"language\">SQL<\/span><\/div>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; ALTER TABLE tb1 ADD KEY (id); mysql&gt; EXPLAIN SELECT * FROM tb1 WHERE id=100\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: ref possible_keys: id key: id key_len: 4 ref: const rows: 1 filtered: 100.00 Extra: NULL \">mysql&gt; <span class=\"hljs-keyword\">ALTER<\/span> <span class=\"hljs-keyword\">TABLE<\/span> tb1 <span class=\"hljs-keyword\">ADD<\/span> <span class=\"hljs-keyword\">KEY<\/span> (<span class=\"hljs-keyword\">id<\/span>);\r\nmysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> * <span class=\"hljs-keyword\">FROM<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> <span class=\"hljs-keyword\">id<\/span>=<span class=\"hljs-number\">100<\/span>\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">ref<\/span>\r\npossible_keys: <span class=\"hljs-keyword\">id<\/span>\r\n          <span class=\"hljs-keyword\">key<\/span>: <span class=\"hljs-keyword\">id<\/span>\r\n      key_len: <span class=\"hljs-number\">4<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: const\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">1<\/span>\r\n     filtered: <span class=\"hljs-number\">100.00<\/span>\r\n        Extra: <span class=\"hljs-literal\">NULL<\/span>\r\n<\/code><\/pre>\n<p>O novo EXPLAIN mostra que o MariaDB agora usa um \u00edndice para limitar o n\u00famero de linhas a 1, o que reduziu drasticamente o tempo de busca.<\/p>\n<h2 id=\"covering-index\" class=\"heading-anchor\">\u00cdndice de cobertura<\/h2>\n<p>Um \u00edndice de cobertura consiste em todas as colunas de uma consulta no \u00edndice para reduzir a recupera\u00e7\u00e3o de valor a partir de tabelas de dados. Aqui est\u00e1 uma ilustra\u00e7\u00e3o na instru\u00e7\u00e3o\u00a0<strong>GROUP BY<\/strong>\u00a0a seguir.<\/p>\n<div id=\"code-try-2\" class=\"codeHeader\" data-bi-name=\"code-header\"><span class=\"language\">SQL<\/span><\/div>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; EXPLAIN SELECT MAX(c1), c2 FROM tb1 WHERE c2 LIKE '%100' GROUP BY c1\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 995789 filtered: 11.11 Extra: Using where; Using temporary; Using filesort \">mysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-keyword\">MAX<\/span>(c1), c2 <span class=\"hljs-keyword\">FROM<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> c2 <span class=\"hljs-keyword\">LIKE<\/span> <span class=\"hljs-string\">'%100'<\/span> <span class=\"hljs-keyword\">GROUP<\/span> <span class=\"hljs-keyword\">BY<\/span> c1\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">ALL<\/span>\r\npossible_keys: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">key<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n      key_len: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">995789<\/span>\r\n     filtered: <span class=\"hljs-number\">11.11<\/span>\r\n        Extra: <span class=\"hljs-keyword\">Using<\/span> <span class=\"hljs-keyword\">where<\/span>; Using temporary; Using filesort\r\n<\/code><\/pre>\n<p>Como pode ser visto na sa\u00edda, o MariaDB n\u00e3o usa nenhum \u00edndice porque nenhum \u00edndice adequado est\u00e1 dispon\u00edvel. Tamb\u00e9m mostra\u00a0<em>Usando tempor\u00e1rio; Usando file sort<\/em>, o que significa que o MariaDB cria uma tabela tempor\u00e1ria para satisfazer a cl\u00e1usula\u00a0<strong>GROUP BY<\/strong>.<\/p>\n<p>Criar um \u00edndice na coluna\u00a0<strong>c2<\/strong>\u00a0sozinho n\u00e3o faz diferen\u00e7a, e o MariaDB ainda precisa criar uma tabela tempor\u00e1ria:<\/p>\n<div id=\"code-try-3\" class=\"codeHeader\" data-bi-name=\"code-header\"><span class=\"language\">SQL<\/span><\/div>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; ALTER TABLE tb1 ADD KEY (c2); mysql&gt; EXPLAIN SELECT MAX(c1), c2 FROM tb1 WHERE c2 LIKE '%100' GROUP BY c1\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 995789 filtered: 11.11 Extra: Using where; Using temporary; Using filesort \">mysql&gt; <span class=\"hljs-keyword\">ALTER<\/span> <span class=\"hljs-keyword\">TABLE<\/span> tb1 <span class=\"hljs-keyword\">ADD<\/span> <span class=\"hljs-keyword\">KEY<\/span> (c2);\r\nmysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-keyword\">MAX<\/span>(c1), c2 <span class=\"hljs-keyword\">FROM<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> c2 <span class=\"hljs-keyword\">LIKE<\/span> <span class=\"hljs-string\">'%100'<\/span> <span class=\"hljs-keyword\">GROUP<\/span> <span class=\"hljs-keyword\">BY<\/span> c1\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">ALL<\/span>\r\npossible_keys: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">key<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n      key_len: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">995789<\/span>\r\n     filtered: <span class=\"hljs-number\">11.11<\/span>\r\n        Extra: <span class=\"hljs-keyword\">Using<\/span> <span class=\"hljs-keyword\">where<\/span>; Using temporary; Using filesort\r\n<\/code><\/pre>\n<p>Neste caso, um\u00a0<strong>\u00edndice coberto<\/strong>\u00a0em ambos\u00a0<strong>c1<\/strong>\u00a0e\u00a0<strong>c2<\/strong>\u00a0pode ser criado, atrav\u00e9s do qual adicionar o valor de\u00a0<strong>c2<\/strong>&#8221; diretamente no \u00edndice para eliminar pesquisa de dados adicionais.<\/p>\n<div id=\"code-try-4\" class=\"codeHeader\" data-bi-name=\"code-header\"><span class=\"language\">SQL<\/span><\/div>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; ALTER TABLE tb1 ADD KEY covered(c1,c2); mysql&gt; EXPLAIN SELECT MAX(c1), c2 FROM tb1 WHERE c2 LIKE '%100' GROUP BY c1\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: index possible_keys: covered key: covered key_len: 108 ref: NULL rows: 995789 filtered: 11.11 Extra: Using where; Using index \">mysql&gt; <span class=\"hljs-keyword\">ALTER<\/span> <span class=\"hljs-keyword\">TABLE<\/span> tb1 <span class=\"hljs-keyword\">ADD<\/span> <span class=\"hljs-keyword\">KEY<\/span> covered(c1,c2);\r\nmysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-keyword\">MAX<\/span>(c1), c2 <span class=\"hljs-keyword\">FROM<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> c2 <span class=\"hljs-keyword\">LIKE<\/span> <span class=\"hljs-string\">'%100'<\/span> <span class=\"hljs-keyword\">GROUP<\/span> <span class=\"hljs-keyword\">BY<\/span> c1\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">index<\/span>\r\npossible_keys: covered\r\n          <span class=\"hljs-keyword\">key<\/span>: covered\r\n      key_len: <span class=\"hljs-number\">108<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">995789<\/span>\r\n     filtered: <span class=\"hljs-number\">11.11<\/span>\r\n        Extra: <span class=\"hljs-keyword\">Using<\/span> <span class=\"hljs-keyword\">where<\/span>; Using index\r\n<\/code><\/pre>\n<p>Como o EXPLAIN acima mostra, o MariaDB agora usa o \u00edndice coberto e evita a cria\u00e7\u00e3o de uma tabela tempor\u00e1ria.<\/p>\n<h2 id=\"combined-index\" class=\"heading-anchor\">\u00cdndice combinado<\/h2>\n<p>Um \u00edndice combinado consiste em valores de v\u00e1rias colunas e pode ser considerado uma matriz de linhas ordenadas por concatena\u00e7\u00e3o de valores das colunas indexadas. \u00a0Esse m\u00e9todo pode ser \u00fatil em uma instru\u00e7\u00e3o\u00a0<strong>GROUP BY<\/strong>.<\/p>\n<div id=\"code-try-5\" class=\"codeHeader\" data-bi-name=\"code-header\"><span class=\"language\">SQL<\/span><\/div>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; EXPLAIN SELECT c1, c2 from tb1 WHERE c2 LIKE '%100' ORDER BY c1 DESC LIMIT 10\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 995789 filtered: 11.11 Extra: Using where; Using filesort \">mysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> c1, c2 <span class=\"hljs-keyword\">from<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> c2 <span class=\"hljs-keyword\">LIKE<\/span> <span class=\"hljs-string\">'%100'<\/span> <span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> c1 <span class=\"hljs-keyword\">DESC<\/span> <span class=\"hljs-keyword\">LIMIT<\/span> <span class=\"hljs-number\">10<\/span>\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">ALL<\/span>\r\npossible_keys: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">key<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n      key_len: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">995789<\/span>\r\n     filtered: <span class=\"hljs-number\">11.11<\/span>\r\n        Extra: <span class=\"hljs-keyword\">Using<\/span> <span class=\"hljs-keyword\">where<\/span>; Using filesort\r\n<\/code><\/pre>\n<p>O MariaDB executa uma opera\u00e7\u00e3o de\u00a0<em>classifica\u00e7\u00e3o de arquivos<\/em>\u00a0que \u00e9 bastante lenta, especialmente quando precisa classificar v\u00e1rias linhas. Para otimizar essa consulta, um \u00edndice combinado pode ser criado em ambas as colunas que est\u00e3o sendo classificadas.<\/p>\n<div id=\"code-try-6\" class=\"codeHeader\" data-bi-name=\"code-header\"><span class=\"language\">SQL<\/span><\/div>\n<pre class=\"has-inner-focus\" tabindex=\"0\"><code class=\"lang-sql\" style=\"box-sizing: inherit; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; position: relative; border: 0px; padding: 0px; display: block;\" data-author-content=\"mysql&gt; ALTER TABLE tb1 ADD KEY my_sort2 (c1, c2); mysql&gt; EXPLAIN SELECT c1, c2 from tb1 WHERE c2 LIKE '%100' ORDER BY c1 DESC LIMIT 10\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 partitions: NULL type: index possible_keys: NULL key: my_sort2 key_len: 108 ref: NULL rows: 10 filtered: 11.11 Extra: Using where; Using index \">mysql&gt; <span class=\"hljs-keyword\">ALTER<\/span> <span class=\"hljs-keyword\">TABLE<\/span> tb1 <span class=\"hljs-keyword\">ADD<\/span> <span class=\"hljs-keyword\">KEY<\/span> my_sort2 (c1, c2);\r\nmysql&gt; <span class=\"hljs-keyword\">EXPLAIN<\/span> <span class=\"hljs-keyword\">SELECT<\/span> c1, c2 <span class=\"hljs-keyword\">from<\/span> tb1 <span class=\"hljs-keyword\">WHERE<\/span> c2 <span class=\"hljs-keyword\">LIKE<\/span> <span class=\"hljs-string\">'%100'<\/span> <span class=\"hljs-keyword\">ORDER<\/span> <span class=\"hljs-keyword\">BY<\/span> c1 <span class=\"hljs-keyword\">DESC<\/span> <span class=\"hljs-keyword\">LIMIT<\/span> <span class=\"hljs-number\">10<\/span>\\G\r\n*************************** <span class=\"hljs-number\">1.<\/span> <span class=\"hljs-keyword\">row<\/span> ***************************\r\n           <span class=\"hljs-keyword\">id<\/span>: <span class=\"hljs-number\">1<\/span>\r\n  select_type: SIMPLE\r\n        <span class=\"hljs-keyword\">table<\/span>: tb1\r\n   <span class=\"hljs-keyword\">partitions<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">type<\/span>: <span class=\"hljs-keyword\">index<\/span>\r\npossible_keys: <span class=\"hljs-literal\">NULL<\/span>\r\n          <span class=\"hljs-keyword\">key<\/span>: my_sort2\r\n      key_len: <span class=\"hljs-number\">108<\/span>\r\n          <span class=\"hljs-keyword\">ref<\/span>: <span class=\"hljs-literal\">NULL<\/span>\r\n         <span class=\"hljs-keyword\">rows<\/span>: <span class=\"hljs-number\">10<\/span>\r\n     filtered: <span class=\"hljs-number\">11.11<\/span>\r\n        Extra: <span class=\"hljs-keyword\">Using<\/span> <span class=\"hljs-keyword\">where<\/span>; Using index\r\n<\/code><\/pre>\n<p>O EXPLAIN agora mostra que o MariaDB \u00e9 capaz de usar o \u00edndice combinado para evitar classifica\u00e7\u00e3o adicional, j\u00e1 que o \u00edndice j\u00e1 est\u00e1 classificado.<\/p>\n<h2 id=\"conclusion\" class=\"heading-anchor\">Conclus\u00e3o<\/h2>\n<p>O uso de EXPLAIN e diferentes tipos de \u00edndices pode aumentar significativamente o desempenho. Ter um \u00edndice na tabela n\u00e3o significa necessariamente que o MariaDB seja capaz de us\u00e1-lo para suas consultas. Sempre valide suas pressuposi\u00e7\u00f5es usando a EXPLAIN e otimize as consultas usando \u00edndices.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>EXPLAIN\u00a0\u00e9 uma ferramenta \u00fatil para otimizar consultas. A instru\u00e7\u00e3o EXPLAIN pode ser utilizada para obter informa\u00e7\u00f5es sobre como as instru\u00e7\u00f5es SQL s\u00e3o executadas. A sa\u00edda a seguir mostra um exemplo da execu\u00e7\u00e3o de uma instru\u00e7\u00e3o EXPLAIN. SQL mysql&gt; EXPLAIN SELECT * FROM tb1 WHERE id=100\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tb1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[91,730,1,42,51,1411,495,102],"tags":[1542,1417,378,1541,877,1418,353,906,366,1539,1201,361,698,355,1540,851],"class_list":["post-5102","post","type-post","status-publish","format-standard","hentry","category-banco-de-dados","category-clusterweb","category-viazap","category-leitura-recomendada","category-linux-linuxrs","category-mysql","category-profissional-de-ti","category-windows","tag-azure","tag-banco","tag-como","tag-consulta","tag-da","tag-dados","tag-de","tag-desempenho","tag-do","tag-explain","tag-mariadb","tag-no","tag-o","tag-para","tag-perfilar","tag-usar"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/5102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5102"}],"version-history":[{"count":3,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/5102\/revisions"}],"predecessor-version":[{"id":5105,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/5102\/revisions\/5105"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}