{"id":26013,"date":"2023-02-03T21:58:12","date_gmt":"2023-02-03T21:58:12","guid":{"rendered":"https:\/\/building.nubank.com\/leveraging-datomic-query-stats-to-optimize-clause-ordering\/"},"modified":"2024-03-21T17:30:27","modified_gmt":"2024-03-21T17:30:27","slug":"como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas","status":"publish","type":"post","link":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/","title":{"rendered":"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas"},"content":{"rendered":"\n<p><em>Escrito por: Keith Harper<\/em><br><em>Revisado por: Robert Randolph, Jarrod Taylor<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"593\" src=\"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?resize=1024%2C593&#038;ssl=1\" alt=\"\" class=\"wp-image-20894\" srcset=\"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?resize=1024%2C593&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?resize=300%2C174&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?resize=768%2C444&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?resize=1536%2C889&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?resize=1200%2C695&amp;ssl=1 1200w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/image-6.png?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p>Como escritor de uma <a href=\"https:\/\/docs.datomic.com\/on-prem\/query\/query.html\">consulta Datomic<\/a>, voc\u00ea tem o controle sobre a ordem de cl\u00e1usulas de consulta, o que pode ser muito eficiente se voc\u00ea tiver informa\u00e7\u00f5es suficientes para ordenar cl\u00e1usulas de consulta com prioridade da maior para a menor. Algumas medidas de seletividade de cl\u00e1usulas s\u00e3o a quantidade de linhas fluindo para dentro e fora de cada cl\u00e1usula, assim como a finitude de vari\u00e1veis l\u00f3gicas usadas por cada cl\u00e1usula. As informa\u00e7\u00f5es retornadas pelas estat\u00edsticas de consulta podem apresentar essas medidas e serem usadas para tomar uma decis\u00e3o informada sobre a ordena\u00e7\u00e3o de cl\u00e1usulas.<\/p>\n\n\n\n<p>Usaremos o <a href=\"https:\/\/github.com\/Datomic\/mbrainz-sample\">reposit\u00f3rio do banco de dados de exemplo do MusicBrainz<\/a> para todos os exemplos neste artigo. Para um breve tutorial sobre como executar o Datomic localmente com o <a href=\"https:\/\/github.com\/Datomic\/mbrainz-sample#obtendo-os-dados\">banco de dados de exemplo do MusicBrainz<\/a>, clique em <a href=\"https:\/\/github.com\/Datomic\/mbrainz-sample\/blob\/master\/README.md#come%C3%A7ando\">LEIA-ME<\/a>.<\/p>\n\n\n\n<p>Usaremos estat\u00edsticas de consulta para obter o estado \u201cdepois\u201d, representado na imagem acima, definindo o conjunto de resultados intermedi\u00e1rio como o menor poss\u00edvel entre as cl\u00e1usulas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como solicitar estat\u00edsticas de consulta<\/h2>\n\n\n\n<p>Come\u00e7ando na vers\u00e3o <a href=\"https:\/\/forum.datomic.com\/t\/datomic-1-0-6610-now-available\/2176\">v1.0.6610 do Datomic On-Prem<\/a>,que ser\u00e1 lan\u00e7ada em breve para o Datomic Cloud, os usu\u00e1rios agora podem solicitar estat\u00edsticas de consulta enquanto fazem uma consulta.<\/p>\n\n\n\n<p>Para executar uma consulta enquanto se acumula estat\u00edsticas de consulta, precisaremos usar <a href=\"https:\/\/docs.datomic.com\/on-prem\/clojure\/index.html#datomic.api\/query\">datomic.api\/query<\/a> e fornecer \u201c:query-stats true\u201d no argumento de mapa de consulta.<\/p>\n\n\n\n<p>Algumas partes das estat\u00edsticas de consulta ser\u00e3o explicadas com mais detalhes nas pr\u00f3ximas se\u00e7\u00f5es. Para mais informa\u00e7\u00f5es, consulte a <a href=\"https:\/\/docs.datomic.com\/on-prem\/api\/query-stats.html\">documenta\u00e7\u00e3o de usu\u00e1rio para estat\u00edsticas de consulta<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cen\u00e1rio: usar estat\u00edsticas de consulta durante a otimiza\u00e7\u00e3o de ordem de cl\u00e1usulas<\/h2>\n\n\n\n<p>Neste cen\u00e1rio, vamos trabalhar com estat\u00edsticas de consulta para guiar nosso processo de avalia\u00e7\u00e3o enquanto buscamos uma ordena\u00e7\u00e3o ideal de cl\u00e1usulas.<\/p>\n\n\n\n<p>Vamos fazer uma consulta que encontrar\u00e1 \u00e1lbuns lan\u00e7ados antes de 1970, nos quais pelo menos um dos artistas seja o <a href=\"https:\/\/en.wikipedia.org\/wiki\/John_Lennon\">John Lennon<\/a>, e depois revelar o nome do \u00e1lbum e o ano de lan\u00e7amento.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:query       '{:find  [?album-name ?year]\n                :in    [$ ?artist-name]\n                :where [[?artist :artist\/name ?artist-name]\n                        [?release :release\/artists ?artist]\n                        [?release :release\/name ?album-name]\n                        [?release :release\/year ?year]\n                        [(&lt; ?year 1970)]]}\n :args        [db &quot;John Lennon&quot;]\n :query-stats true}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:query       &#39;<\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:find  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                :in    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">$ ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                :where <\/span><span style=\"color: #ECEFF4\">[[<\/span><span style=\"color: #D8DEE9FF\">?artist :artist\/name ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/artists ?artist<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/name ?album-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/year ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #ECEFF4\">[(<\/span><span style=\"color: #88C0D0\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> ?year <\/span><span style=\"color: #B48EAD\">1970<\/span><span style=\"color: #ECEFF4\">)]]}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :args        <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">db <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">John Lennon<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :query-stats <\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Os resultados da solicita\u00e7\u00e3o de estat\u00edsticas de consulta para esta consulta <a href=\"https:\/\/gist.github.com\/keithharper\/7931e836d51b453eb3ab43141685a3d2\">podem ser vistos aqui<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">:phases<\/h2>\n\n\n\n<p>Cada item abaixo de \u201c.phases\u201d representa um conjunto de cl\u00e1usulas que ser\u00e3o processadas como uma \u00fanica unidade de trabalho. Costuma existir apenas um \u00fanico item para a maioria das consultas, mas algumas delas ter\u00e3o v\u00e1rios itens sob \u201c:phases\u201d (por exemplo: os que usam <a href=\"https:\/\/docs.datomic.com\/on-prem\/query\/query.html#regras\">regras de consulta<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">:sched<\/h2>\n\n\n\n<p>\u201c:sched\u201d \u00e9 a abrevia\u00e7\u00e3o de \u201cschedule\u201d (cronograma, em ingl\u00eas), e representa o plano aproximado que a ferramenta de consulta usar\u00e1 ao processar esta consulta:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"(([(ground $__in__2) ?artist-name]\n  [?artist :artist\/name ?artist-name]\n  [?release :release\/artists ?artist]\n  [?release :release\/name ?album-name]\n  [?release :release\/year ?year]\n  [(&lt; ?year 1970)]))\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">(([(<\/span><span style=\"color: #88C0D0\">ground<\/span><span style=\"color: #D8DEE9FF\"> $__in__2<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?artist :artist\/name ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/artists ?artist<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/name ?album-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/year ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">[(<\/span><span style=\"color: #88C0D0\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> ?year <\/span><span style=\"color: #B48EAD\">1970<\/span><span style=\"color: #ECEFF4\">)]))<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Perceba que h\u00e1 uma cl\u00e1usula de consulta extra no cronograma que n\u00e3o estava no conjunto de cl\u00e1usulas que fornecemos para \u201c.where\u201d. \u201c[(<strong><em>ground<\/em><\/strong> <strong>$__in__2<\/strong>) <strong>?artist-name<\/strong>]\u201d \u00e9 como o valor (John Lennon) e a vari\u00e1vel l\u00f3gica (\u201c?artist-name\u201d) passados para \u201c:in\u201d se vinculam \u00e0 ferramenta de consulta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">:clauses<\/h2>\n\n\n\n<p>\u201c:clauses\u201d cont\u00e9m as cl\u00e1usulas de consulta feitas para esta fase:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>clause<\/td><td>rows-in<\/td><td>rows-out<\/td><td>binds-in<\/td><td>binds-out<\/td><td>expansion<\/td><td>preds<\/td><\/tr><tr><td>[(<strong><em>ground<\/em><\/strong> <strong>$__in__2<\/strong>) <strong>?artist-name<\/strong>]<\/td><td><strong>0<\/strong><\/td><td><strong>1<\/strong><\/td><td>()<\/td><td>[<strong>?artist-name<\/strong>]<\/td><td><strong>1<\/strong><\/td><td><\/td><\/tr><tr><td>[<strong>?artist<\/strong> :artist\/name <strong>?artist-name<\/strong>]<\/td><td><strong>1<\/strong><\/td><td><strong>1<\/strong><\/td><td>[<strong>?artist-name<\/strong>]<\/td><td>[<strong>?artist<\/strong>]<\/td><td><\/td><td><\/td><\/tr><tr><td>[<strong>?release <\/strong>:release\/artists <strong>?artist<\/strong>]<\/td><td><strong>1<\/strong><\/td><td><strong>21<\/strong><\/td><td>[<strong>?artist<\/strong>]<\/td><td>[<strong>?release<\/strong>]<\/td><td><strong>20<\/strong><\/td><td><\/td><\/tr><tr><td>[<strong>?release <\/strong>:release\/name <strong>?album-name<\/strong>]<\/td><td><strong>21<\/strong><\/td><td><strong>21<\/strong><\/td><td>[<strong>?release<\/strong>]<\/td><td>[<strong>?album-name<\/strong>&nbsp;<strong>?release<\/strong>]<\/td><td><\/td><td><\/td><\/tr><tr><td>[<strong>?release <\/strong>:release\/year <strong>?year<\/strong>]<\/td><td><strong>21<\/strong><\/td><td><strong>3<\/strong><\/td><td>[<strong>?album-name<\/strong>&nbsp;<strong>?release<\/strong>]<\/td><td>[<strong>?year<\/strong><strong>&nbsp;?album-name<\/strong>]<\/td><td><\/td><td>([(&lt; <strong>?year<\/strong> <strong>1970<\/strong>)])<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>A tabela acima pode facilitar a interpreta\u00e7\u00e3o das estat\u00edsticas de consulta para cl\u00e1usulas. Perceba como \u201c:rows-in\u201d e \u201c:binds-in\u201d para uma cl\u00e1usula correspondem diretamente a \u201c:rows-out\u201d e \u201c:binds-out\u201d da cl\u00e1usula anterior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e1usula 1<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:clause    [(ground $__in__2) ?artist-name],\n :rows-in   0,\n :rows-out  1,\n :binds-in  (),\n :binds-out [?artist-name],\n :expansion 1}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[(<\/span><span style=\"color: #88C0D0\">ground<\/span><span style=\"color: #D8DEE9FF\"> $__in__2<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :expansion <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Ressaltando, essa cl\u00e1usula representa apenas o v\u00ednculo do valor e da vari\u00e1vel l\u00f3gica passados para \u201c.in\u201d.<\/p>\n\n\n\n<p>\u201c:rows-in 0\u201d indica que n\u00e3o havia linhas no resultado definido antes do processamento da cl\u00e1usula.&nbsp;<\/p>\n\n\n\n<p>\u201c:rows-out 1\u201d indica que o resultado definido agora tem 1 cl\u00e1usula presente, que cont\u00e9m o v\u00ednculo indicado por \u201c:binds-out [?artist-name]\u201d.<br>\u201c:expansion 1\u201d significa apenas que \u201c:rows-out\u201d aumentou de tamanho em 1 linha, ap\u00f3s o processamento dessa cl\u00e1usula.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e1usula 2<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:clause    [?artist :artist\/name ?artist-name],\n :rows-in   1,\n :rows-out  1,\n :binds-in  [?artist-name],\n :binds-out [?artist]}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?artist :artist\/name ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?artist<\/span><span style=\"color: #ECEFF4\">]}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Perceba que \u201c:binds-out\u201d n\u00e3o tem mais \u201c?artist-name\u201d, mas tem um novo v\u00ednculo de \u201c?artist\u201d. Isso acontece porque a ferramenta de consulta pode ver as cl\u00e1usulas que ser\u00e3o processadas depois dessa, e nenhuma delas usa \u201c?artist-name\u201d. Assim, ela pode ser removida dos resultados sem problemas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e1usula 3<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:clause    [?release :release\/artists ?artist],\n :rows-in   1,\n :rows-out  21,\n :binds-in  [?artist],\n :binds-out [?release],\n :expansion 20}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/artists ?artist<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?artist<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :expansion <\/span><span style=\"color: #B48EAD\">20<\/span><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Agora chegamos \u00e0 primeira cl\u00e1usula que apresenta uma expans\u00e3o real do conjunto de resultados. As estat\u00edsticas de consulta para esta cl\u00e1usula indicam que foram encontrados 21 lan\u00e7amentos, entre os quais John Lennon estava envolvido.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"266\" src=\"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-22-at-18.35.36.png?resize=1024%2C266&#038;ssl=1\" alt=\"\" class=\"wp-image-20900\" srcset=\"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-22-at-18.35.36.png?resize=1024%2C266&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-22-at-18.35.36.png?resize=300%2C78&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-22-at-18.35.36.png?resize=768%2C200&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-22-at-18.35.36.png?resize=1200%2C312&amp;ssl=1 1200w, https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/05\/Screenshot-2023-05-22-at-18.35.36.png?w=1376&amp;ssl=1 1376w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"is-style-default\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e1usula 4<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:clause    [?release :release\/name ?album-name],\n :rows-in   21,\n :rows-out  21,\n :binds-in  [?release],\n :binds-out [?album-name ?release]}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/name ?album-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?release<\/span><span style=\"color: #ECEFF4\">]}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Esta cl\u00e1usula introduz novos valores ao conjunto de resultados, como indicado pela diferen\u00e7a entre os v\u00ednculos de entrada e de sa\u00edda. Apesar disso, a quantidade de linhas no conjunto de resultados n\u00e3o aumenta. O que voc\u00ea acha que aconteceria se transform\u00e1ssemos essa \u00faltima cl\u00e1usula em nossas cl\u00e1usulas \u201c.where\u201d?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e1usula 5<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:clause    [?release :release\/year ?year],\n :rows-in   21,\n :rows-out  3,\n :binds-in  [?album-name ?release],\n :binds-out [?album-name ?year],\n :preds     ([(&lt; ?year 1970)])}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/year ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :preds     <\/span><span style=\"color: #ECEFF4\">([(<\/span><span style=\"color: #88C0D0\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> ?year <\/span><span style=\"color: #B48EAD\">1970<\/span><span style=\"color: #ECEFF4\">)])}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>A \u00faltima cl\u00e1usula limita bastante o conjunto de resultados e mostra informa\u00e7\u00f5es que ainda n\u00e3o estavam presentes: \u201c:preds\u201d. A presen\u00e7a de uma entrada \u201c:preds\u201d indica que as cl\u00e1usulas correspondentes foram usadas como predicados de filtro enquanto buscavam respostas para \u201c[<strong>?release<\/strong> :release\/year <strong>?year<\/strong>]\u201d.<\/p>\n\n\n\n<p>Agora vamos conferir o que aconteceria se mov\u00eassemos a cl\u00e1usula 4 at\u00e9 o fim das nossas cl\u00e1usulas \u201c:where\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cen\u00e1rio: Executar todas as uni\u00f5es necess\u00e1rias, depois projetar os valores<\/h2>\n\n\n\n<p>Vamos usar a mesma consulta de antes, mas desta vez observaremos o que acontece quando movemos \u201c[<strong>?release<\/strong> :release\/name <strong>?album-name<\/strong>]\u201d para o fim das nossas cl\u00e1usulas \u201c:where\u201d.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:query '{:find  [?album-name ?year]\n          :in    [$ ?artist-name]\n          :where [[?artist :artist\/name ?artist-name]\n                  [?release :release\/artists ?artist]\n                  [?release :release\/year ?year]\n                  [(&lt; ?year 1970)]\n                  [?release :release\/name ?album-name]]}\n :args  [db &quot;John Lennon&quot;]}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:query &#39;<\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:find  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          :in    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">$ ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          :where <\/span><span style=\"color: #ECEFF4\">[[<\/span><span style=\"color: #D8DEE9FF\">?artist :artist\/name ?artist-name<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/artists ?artist<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/year ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                  <\/span><span style=\"color: #ECEFF4\">[(<\/span><span style=\"color: #88C0D0\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> ?year <\/span><span style=\"color: #B48EAD\">1970<\/span><span style=\"color: #ECEFF4\">)]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/name ?album-name<\/span><span style=\"color: #ECEFF4\">]]}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :args  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">db <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">John Lennon<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">]}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Acontece algo muito interessante quando executamos essa busca, embora n\u00e3o fique \u00f3bvio imediatamente. Os resultados da solicita\u00e7\u00e3o de estat\u00edsticas de consulta para esta consulta <a href=\"https:\/\/gist.github.com\/keithharper\/2e8d1498d2176c3fcdb0311fc7180002\">podem ser vistos aqui<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>clause<\/td><td>rows-in<\/td><td>rows-out<\/td><td>binds-in<\/td><td>binds-out<\/td><td>expansion<\/td><td>preds<\/td><\/tr><tr><td>[(<strong><em>ground<\/em><\/strong> <strong>$__in__2<\/strong>) <strong>?artist-name<\/strong>]<\/td><td><strong>0<\/strong><\/td><td><strong>1<\/strong><\/td><td>()<\/td><td>[<strong>?artist-name<\/strong>]<\/td><td><strong>1<\/strong><\/td><td><\/td><\/tr><tr><td>[<strong>?artist<\/strong> :artist\/name <strong>?artist-name<\/strong>]<\/td><td><strong>1<\/strong><\/td><td><strong>1<\/strong><\/td><td>[<strong>?artist-name<\/strong>]<\/td><td>[<strong>?artist<\/strong>]<\/td><td><\/td><td><\/td><\/tr><tr><td>[<strong>?release <\/strong>:release\/artists <strong>?artist<\/strong>]<\/td><td><strong>1<\/strong><\/td><td><strong>21<\/strong><\/td><td>[<strong>?artist<\/strong>]<\/td><td>[<strong>?release<\/strong>]<\/td><td><strong>20<\/strong><\/td><td><\/td><\/tr><tr><td>[<strong>?release <\/strong>:release\/year <strong>?year<\/strong>]<\/td><td><strong>21<\/strong><\/td><td><strong>3<\/strong><\/td><td>[<strong>?release<\/strong>]<\/td><td>[<strong>?year<\/strong><strong>&nbsp;?release<\/strong>]<\/td><td><\/td><td>([(&lt; <strong>?year<\/strong> <strong>1970<\/strong>)])<\/td><\/tr><tr><td>[<strong>?release <\/strong>:release\/name <strong>?album-name<\/strong>]<\/td><td><strong>3<\/strong><\/td><td><strong>3<\/strong><\/td><td>[<strong>?year<\/strong><strong>&nbsp;?release<\/strong>]<\/td><td>[<strong>?album-name<\/strong>&nbsp;<strong>?year<\/strong>]<\/td><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Vamos rever a cl\u00e1usula 4 da primeira consulta:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"{:clause    [?release :release\/name ?album-name],\n :rows-in   21,\n :rows-out  21,\n :binds-in  [?release],\n :binds-out [?album-name ?release]}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/name ?album-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?release<\/span><span style=\"color: #ECEFF4\">]}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Podemos observar que o conjunto de resultados agora cont\u00e9m 21 itens, cada um com 2 valores. Como resultado, temos um total de 42 valores no conjunto de resultados.<\/p>\n\n\n\n<p>Agora vamos comparar isso com a segunda consulta:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\";; was clause #5, now clause #4\n{:clause    [?release :release\/year ?year],\n :rows-in   21,\n :rows-out  3,\n :binds-in  [?release],\n :binds-out [?year ?release],\n :preds     ([(&lt; ?year 1970)])}\n \n;; was clause #4, now clause #5\n{:clause    [?release :release\/name ?album-name],\n :rows-in   3,\n :rows-out  3,\n :binds-in  [?year ?release],\n :binds-out [?album-name ?year]}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">;; was clause #5, now clause #4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/year ?year<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">21<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?year ?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :preds     <\/span><span style=\"color: #ECEFF4\">([(<\/span><span style=\"color: #88C0D0\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> ?year <\/span><span style=\"color: #B48EAD\">1970<\/span><span style=\"color: #ECEFF4\">)])}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">;; was clause #4, now clause #5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\">:clause    <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?release :release\/name ?album-name<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-in   <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :rows-out  <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-in  <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?year ?release<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> :binds-out <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">?album-name ?year<\/span><span style=\"color: #ECEFF4\">]}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>A cl\u00e1usula 4 na segunda consulta reduz nosso conjunto de resultados de 21 para 3, mas acrescenta outro valor nele. O conjunto de resultados atual cont\u00e9m 3 linhas, com 2 valores em cada uma, totalizando 6 valores.<\/p>\n\n\n\n<p>Agora, a cl\u00e1usula que encontra o nome do \u00e1lbum s\u00f3 precisa buscar em 3 \u00e1lbuns. Antes, era preciso buscar em 21 e excluir todos, exceto 3, ap\u00f3s limitar o ano de lan\u00e7amento. Como voc\u00ea pode imaginar, isso economiza bastante trabalho em escalas maiores.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Essa \u00e9 apenas uma das possibilidades de usar informa\u00e7\u00f5es retornadas por estat\u00edsticas de consulta para entender e aprimorar suas consultas. As estat\u00edsticas de consulta tamb\u00e9m podem ser \u00fateis para quando voc\u00ea se perguntar por que suas consultas agem diferente conforme uma distribui\u00e7\u00e3o diferente dos dados subjacentes, ou questionar regras recursivas de consultas etc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.<\/p>\n","protected":false},"author":178110177,"featured_media":24846,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2497,2586],"tags":[2673,2582,2672],"ppma_author":[2390],"class_list":["post-26013","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering-pt-br","category-software-engineering-pt-br","tag-clause-ordering-pt-br","tag-datomic-pt-br","tag-query-stats-pt-br"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas - Building Nubank<\/title>\n<meta name=\"description\" content=\"As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Nubank\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-03T21:58:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T17:30:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Keith Harper - Staff Software Engineer at Nubank\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Keith Harper - Staff Software Engineer at Nubank\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/\"},\"author\":{\"name\":\"Keith Harper - Staff Software Engineer at Nubank\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/dee6b0c1f5f1cb2026efc53d473ad8c3\"},\"headline\":\"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas\",\"datePublished\":\"2023-02-03T21:58:12+00:00\",\"dateModified\":\"2024-03-21T17:30:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/\"},\"wordCount\":1196,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1\",\"keywords\":[\"Clause Ordering\",\"Datomic\",\"query-stats\"],\"articleSection\":[\"Engineering\",\"Software Engineering\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/\",\"name\":\"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1\",\"datePublished\":\"2023-02-03T21:58:12+00:00\",\"dateModified\":\"2024-03-21T17:30:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/dee6b0c1f5f1cb2026efc53d473ad8c3\"},\"description\":\"As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1\",\"width\":1200,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/dee6b0c1f5f1cb2026efc53d473ad8c3\",\"name\":\"Keith Harper - Staff Software Engineer at Nubank\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nubank.com.br\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/avatar_user_178110177_1675452580-96x96.png83cdfc2cf8cd76f20ff8c361479fd3ea\",\"url\":\"https:\\\/\\\/building.nubank.com.br\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/avatar_user_178110177_1675452580-96x96.png\",\"contentUrl\":\"https:\\\/\\\/building.nubank.com.br\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/avatar_user_178110177_1675452580-96x96.png\",\"caption\":\"Keith Harper - Staff Software Engineer at Nubank\"},\"description\":\"Keith Harper is responsible for developing and supporting Datomic, helping Nubank by educating and empowering engineering teams. He has a degree in Information Technology from Georgia Southern University. Keith joined Nubank in 2021 and has extensive experience developing software using Clojure and Datomic. He also is a fan of Hearthstone and other digital card games.\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/author\\\/keith-harper\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas - Building Nubank","description":"As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.","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:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/","og_locale":"pt_BR","og_type":"article","og_title":"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas - Building Nubank","og_description":"As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.","og_url":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/","og_site_name":"Building Nubank","article_published_time":"2023-02-03T21:58:12+00:00","article_modified_time":"2024-03-21T17:30:27+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1","type":"image\/jpeg"}],"author":"Keith Harper - Staff Software Engineer at Nubank","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Keith Harper - Staff Software Engineer at Nubank","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#article","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/"},"author":{"name":"Keith Harper - Staff Software Engineer at Nubank","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/dee6b0c1f5f1cb2026efc53d473ad8c3"},"headline":"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas","datePublished":"2023-02-03T21:58:12+00:00","dateModified":"2024-03-21T17:30:27+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/"},"wordCount":1196,"commentCount":0,"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1","keywords":["Clause Ordering","Datomic","query-stats"],"articleSection":["Engineering","Software Engineering"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/","url":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/","name":"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas - Building Nubank","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#primaryimage"},"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1","datePublished":"2023-02-03T21:58:12+00:00","dateModified":"2024-03-21T17:30:27+00:00","author":{"@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/dee6b0c1f5f1cb2026efc53d473ad8c3"},"description":"As estat\u00edsticas de consulta s\u00e3o um novo recurso que permite que os usu\u00e1rios vejam as decis\u00f5es tomadas pela ferramenta de consulta durante o processo de busca.","breadcrumb":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1","contentUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1","width":1200,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/building.nubank.com\/pt-br\/como-usar-estatisticas-de-consulta-do-datomic-para-otimizar-ordem-de-clausulas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nubank.com\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Como usar estat\u00edsticas de consulta do Datomic para Otimizar Ordem de Cl\u00e1usulas"}]},{"@type":"WebSite","@id":"https:\/\/building.nubank.com\/pt-br\/#website","url":"https:\/\/building.nubank.com\/pt-br\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nubank.com\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/dee6b0c1f5f1cb2026efc53d473ad8c3","name":"Keith Harper - Staff Software Engineer at Nubank","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/02\/avatar_user_178110177_1675452580-96x96.png83cdfc2cf8cd76f20ff8c361479fd3ea","url":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/02\/avatar_user_178110177_1675452580-96x96.png","contentUrl":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/02\/avatar_user_178110177_1675452580-96x96.png","caption":"Keith Harper - Staff Software Engineer at Nubank"},"description":"Keith Harper is responsible for developing and supporting Datomic, helping Nubank by educating and empowering engineering teams. He has a degree in Information Technology from Georgia Southern University. Keith joined Nubank in 2021 and has extensive experience developing software using Clojure and Datomic. He also is a fan of Hearthstone and other digital card games.","url":"https:\/\/building.nubank.com\/pt-br\/author\/keith-harper\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/02\/optimizing-datomic-queries_Feature_1200x675-1.jpg?fit=1200%2C675&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-6Lz","jetpack_sharing_enabled":true,"authors":[{"term_id":2390,"user_id":178110177,"is_guest":0,"slug":"keith-harper","display_name":"Keith Harper - Staff Software Engineer at Nubank","avatar_url":"https:\/\/building.nubank.com.br\/wp-content\/uploads\/2023\/02\/avatar_user_178110177_1675452580-96x96.png","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/26013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/users\/178110177"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/comments?post=26013"}],"version-history":[{"count":4,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/26013\/revisions"}],"predecessor-version":[{"id":28860,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/26013\/revisions\/28860"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media\/24846"}],"wp:attachment":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media?parent=26013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/categories?post=26013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/tags?post=26013"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/ppma_author?post=26013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}