Guia de criação de índice do SQL Server.pdf

download Guia de criação de índice do SQL Server.pdf

of 18

Transcript of Guia de criação de índice do SQL Server.pdf

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    1/18

    Tradução OriginalEste artigo foi traduzido manualmente. Coloque o ponteiro do mouse sobre as frases doartigo para ver o texto original. Mais informações.

    Guia de riação de !ndie do "#$ "erver

    Os !ndies riados inadequadamente e a falta de !ndies são as prinipais fontes de afunilamentos do apliativo de bano dedados. % riação efiiente de !ndies & muito importante para alançar um bom desempen'o de bano de dados e deapliativo. Este guia de riação de !ndie do "#$ "erver ont&m informações e pr(tias reomendadas para a)udar vo* a riar!ndies efetivos para atender +s neessidades de seu apliativo.

    Aplica-se a, "#$ "erver -/ a "#$ "erver -0-1 a menos que indiado em ontr(rio.

    Este guia presume que o leitor ten'a uma ompreensão geral dos tipos de !ndies dispon!veis no "#$ "erver. 2ara obter umadesrição geral dos tipos de !ndies1 onsulte Tipos de !ndie.

    3este guia3oções b(sias sobre riação de !ndie

    4iretrizes para riação de !ndie geral

    4iretrizes de design de !ndies lusterizados

    4iretrizes de riação de !ndie não lusterizado

    4iretrizes de design de !ndie exlusivo

    4iretrizes de riação de !ndie filtrado

    $eitura adiional

    3oções b(sias sobre riação de !ndie

    5m !ndie & uma estrutura em diso assoiada a uma tabela ou exibição1 que agiliza a reuperação das lin'as de uma tabelaou exibição. 5m !ndie ont&m 'aves riadas de uma ou mais olunas da tabela ou exibição. Essas 'aves são armazenadasem uma estrutura 6(rvore 78 que 'abilita o "#$ "erver a loalizar a lin'a ou as lin'as assoiadas aos valores de 'ave deforma r(pida e efiaz.

    % seleção dos !ndies ertos para um bano de dados e sua arga de trabal'o & um ato de balaneamento omplexo entre aveloidade de onsulta e o usto de atualização. 9ndies limitados ou om pouas olunas na 'ave de !ndie exigem menosespaço em diso e sobrearga de manutenção. 2or outro lado1 !ndies amplos obrem mais onsultas. Talvez vo* preiseexperimentar v(rios pro)etos diferentes antes de enontrar o !ndie mais efiiente. Os !ndies podem ser adiionados1modifiados e desartados sem afetar o esquema de bano de dados ou o design do apliativo. 2ortanto1 vo* não deve'esitar em experimentar !ndies diferentes.

    O otimizador de onsulta no "#$ "erver esol'e o !ndie mais efiaz de forma onfi(vel na grande maioria dos asos. "uaestrat&gia geral de riação de !ndie deveria forneer uma variedade de opções de !ndies para o otimizador de onsultaesol'er e onfiar durante a tomada de deisão orreta. :sso reduz o tempo de an(lise e atinge um bom desempen'o emv(rias situações. 2ara onsultar quais !ndies o otimizador de onsulta usa em uma onsulta espe!fia1 no "#$ "erverManagement "tudio1 no menu Consulta1 seleione Incluir Plano de Execução Real.

    3ão equipare sempre o uso de !ndie om bom desempen'o e bom desempen'o om uso de !ndie efiiente. "e o uso deum !ndie sempre a)udasse a produzir o mel'or desempen'o1 a tarefa do otimizador de onsulta seria simples. 3a realidade1a esol'a inorreta de um !ndie pode ausar um desempen'o insatisfat;rio. 2ortanto1 a tarefa do otimizador de onsulta &seleionar um !ndie ou uma ombinação de !ndies apenas quando isso gerar mel'oria de desempen'o e evitar a

    SQL Server 2012 Este t;pio ainda não foi avaliado omo

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    2/18

    reuperação indexada quando isso atrapal'ar o desempen'o.

    Tarefas de riação de !ndie

    %s seguintes tarefas ompõem a estrat&gia reomendada para riação de !ndies,

    Entenda as arater!stias do bano de dados. 2or exemplo1 trata

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    3/18

    m!nimo de olunas poss!vel.

    5se muitos !ndies para aperfeiçoar o desempen'o da onsulta em tabelas om baixos requisitos deatualização1 mas om grandes volumes de dados. Grandes nDmeros de !ndies podem a)udar o desempen'ode onsultas que não modifiam dados1 omo instruções "E$ECT1 porque o otimizador de onsulta tem mais!ndies para esol'er para determinar o m&todo de aesso mais r(pido.

    :ndexar tabelas pequenas pode não ser bom porque pode fazer o otimizador de onsulta levar mais tempo paraatravessar o !ndie prourando dados do que exeutar uma simples varredura de tabela. 2ortanto1 os !ndies em

    tabelas pequenas talvez nuna se)am usados1 mas ainda devem ser mantidos omo dados nas alterações de tabela.

    9ndies em exibições pode prover gan'os de desempen'o signifiantes quando a exibição ontiver agregações1 )unções de tabela ou uma ombinação de agregações e )unções. % exibição não preisa estar expliitamenterefereniada na onsulta para o otimizador de onsulta us(

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    4/18

    Examine a distribuição de dados na oluna. Hrequentemente1 uma onsulta longa & ausada ao se indexar umaoluna om pouos valores exlusivos1 ou ao exeutar uma )unção em tal oluna. :sto & um problema fundamentalom dados e onsulta1 e geralmente não pode ser resolvido sem identifiar esta situação. 2or exemplo1 uma listatelefInia f!sia ordenada alfabetiamente pelo Dltimo nome não ser( r(pida em loalizar uma pessoa1 se todas aspessoas na idade tiverem nomes de "mit' ou Jones. 2ara obter mais informações sobre distribuição de dados1onsulte Estat!stias.

    Considere o uso de !ndies filtrados em olunas om subon)untos bem definidos1 por exemplo1 olunas esparsas1olunas om grande a maioria dos valores 35$$1 olunas om ategorias de valores e olunas om intervalos

    diferentes de valores. 5m !ndie filtrado bem pro)etado pode mel'orar o desempen'o da onsulta e reduzir osustos de manutenção de !ndie e de armazenamento.

    Considere a ordem das olunas se o !ndie ontiver olunas mDltiplas. % oluna usada na l(usula KLEE em umaigual a 681 maior que 6N81 menor que 681 ou rit&rio de onsulta 7ETKEE31 ou se partiipar em uma )unção1 deve serusada primeiro. Colunas adiionais devem ser ordenadas om base em seu n!vel de distinção1 ou se)a1 do maisdistinto ao menos distinto.

    2or exemplo1 se o !ndie for definido omo LastName1 FirstName o !ndie ser( Dtil quando o rit&rio de onsulta for

    WHERE LastName = 'Smith' ou WHERE LastName = Smith AND FirstName LIKE 'J%'. 2or&m1 o otimizador de

    onsulta não usaria o !ndie para uma onsulta que tivesse pesquisado apenas em FirstName (WHERE FirstName

    = 'Jane').

    Considere indexar as olunas omputadas. 2ara obter mais informações1 onsulte 9ndies em olunas omputadas.

    Carater!stias do !ndie

    4epois de ter determinado que um !ndie & apropriado para uma onsulta1 vo* pode seleionar o tipo de !ndie quemel'or se ad&que a sua situação. Carater!stias de !ndie inluem o seguinte,

    Clusterizado não lusterizado.

    Exlusivo não exlusivo

    Pnia oluna multioluna

    Ordem resente ou deresente em olunas no !ndie

    Tabela ompleta versus filtrada para !ndies não lusterizados

    Qo* tamb&m pode personalizar as arater!stias de armazenamento iniial do !ndie para aperfeiçoar seu desempen'o oumanutenção definindo uma opção omo H:$$H%CTO. %l&m disso1 vo* pode determinar o loal de armazenamento de!ndie usando grupos de arquivos ou esquemas de partição para aperfeiçoar o desempen'o.

    2osição do !ndie em grupos de arquivos ou esquemas de partição

    R medida que desenvolve sua estrat&gia de design de !ndies1 onsidere a oloação dos !ndies nos grupos de arquivosassoiados ao bano de dados. % seleção uidadosa do grupo de arquivos ou esquema de partição pode mel'orar odesempen'o da onsulta.

    2or padrão1 os !ndies são armazenados no mesmo grupo de arquivos que a tabela base na qual o !ndie & riado. 5m!ndie luster não partiionado e a tabela base sempre residem no mesmo grupo de arquivos. 3o entanto1 vo* pode fazero seguinte,

    Crie !ndies não lusterizados em um grupo de arquivos diferente do grupo de arquivos da tabela base ou do !ndielusterizado.

    2artiione !ndies luster e não luster para que oupem v(rios grupos de arquivos.

    Mova uma tabela de um grupo de arquivos para outro desartando o !ndie luster e espeifiando um novo grupode arquivos ou esquema de partição na l(usula MOQE TO da instrução 4O2 :34E ou usando a instrução CE%TE:34E om a l(usula 4O2SE:"T:3G.

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    5/18

    %o riar o !ndie não luster em um grupo de arquivos diferente1 vo* pode obter gan'os de desempen'o se os grupos dearquivos estiverem usando unidades f!sias diferentes om seus pr;prios ontroladores. %s informações de !ndies e dedados podem ser lidas em paralelo pelas v(rias abeças de diso. 2or exemplo1 se TableA no grupo de arquivos !" e

    In#e$A no grupo de arquivos ! estiverem ambos sendo usados pela mesma onsulta1 podem

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    6/18

    "e um !ndie for riado om olunas de 'ave orrespondentes +s da l(usula O4E 7 da onsulta1 o operador "OTpoder( ser eliminado do plano de onsulta1 e este se tornar( mais efiaz.

    4epois que a onsulta for novamente exeutada1 o plano de exeução a seguir mostra que o operador "OT foi eliminado eque o !ndie não lusterizado reentemente riado & utilizado.

    O Meanismo de 7ano de 4ados pode se mover para qualquer direção de forma igualmente efiaz. 5m !ndie definidoomo (Re&ete#t DES01 *r/#+tID AS0) ainda pode ser usado em uma onsulta na qual a direção de lassifiação

    das olunas da l(usula O4E 7 & invertida. 2or exemplo1 uma onsulta om a l(usula O4E 7 .RDER 67

    Re&ete#t AS01 *r/#+tID DES0 pode utilizar o !ndie.

    % ordem de lassifiação s; pode ser espeifiada para olunas de 'ave. % exibição de at(logo sVs.indexSolumns e afunção :34EWES2O2ET relatam se a oluna de !ndie est( armazenada em ordem resente ou deresente.

    X:n!ioY

    4iretrizes de design de !ndies lusterizados

    Os !ndies lusterizados lassifiam e armazenam as lin'as de dados da tabela om base em seus valores de 'ave. 2ode'aver apenas um !ndie lusterizado por tabela1 porque as pr;prias lin'as de dados podem ser lassifiadas apenas em umaDnia ordem. Com pouas exeções1 toda tabela deveria ter um !ndie lusterizado definido na oluna ou olunas1 o qualproporiona o seguinte,

    2ode ser usado para onsultas frequentemente usadas.

    Oferee um alto grau de singularidade.

     'servação

    #uando vo* ria uma restrição 2:M% WE1 um !ndie exlusivo na oluna1 ou olunas1 & riadoautomatiamente. 2or padrão1 esse !ndie & luster. 2or&m1 vo* pode espeifiar um !ndie não lusterizado aoriar a restrição.

    2ode ser usado em onsultas de intervalo.

    "e o !ndie lusterizado não for riado om a propriedade 53:#5E1 o Meanismo de 7ano de 4ados aresentar( umaoluna de indiador de exlusividade de A bVtes automatiamente + tabela. #uando neess(rio1 o Meanismo de 7ano de

    4ados aresenta um valor de indiador de exlusividade automatiamente a uma lin'a para tornar ada 'ave exlusiva.Essa oluna e seus valores são usados internamente e não podem ser vistos ou avaliados por usu(rios.

    %rquitetura de !ndie lusterizado

    3o "#$ "erver1 os !ndies são organizados omo (rvores 7. Cada p(gina em uma (rvore 7 de !ndie & 'amada de n; do

    0REATE N.N0L9STERED INDE: I:*+rhase.r#erDetailRe&ete#t

    .N *+rhasin,-*+rhase.r#erDetail

      (Re&ete#t DES01 *r/#+tID AS01 D+eDate1 .r#ert)8

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    7/18

    !ndie. O n; superior da (rvore 7 & 'amado de n; raiz. Os n;s inferiores no !ndie são 'amados de n;s fol'a. #uaisquern!veis de !ndie entre os n;s raiz e fol'a são oletivamente on'eidos omo n!veis intermedi(rios. Em um !ndielusterizado1 os n;s fol'a ont*m as p(ginas de dados da tabela sub)aente. Os n;s de n!vel intermedi(rio e raiz ont*mp(ginas de !ndie om lin'as de !ndie. Cada lin'a de !ndie ont&m um valor de 'ave e um ponteiro para uma p(gina den!vel de intermedi(rio na (rvore 7 ou uma lin'a de dados no n!vel fol'a do !ndie. %s p(ginas de ada n!vel do !ndie sãovinuladas a uma lista vinulada duas vezes.

    9ndies lusterizados t*m uma lin'a em sVs.partitions1 om index(id  0 para ada partiionamento usado pelo !ndie. 2orpadrão1 um !ndie lusterizado tem um Dnio partiionamento. #uando um !ndie lusterizado tem partiionamentos

    mDltiplos1 ada partiionamento tem uma estrutura de (rvore 7 que ont&m os dados para aquele partiionamentoespe!fio. 2or exemplo1 se um !ndie lusterizado tiver quatro partiionamentos1 'aver( quatro estruturas de (rvore 7 umaem ada partiionamento.

    4ependendo dos tipos de dados no !ndie lusterizado1 ada estrutura de !ndie lusterizado ter( uma ou mais unidades dealoação para armazenar e gereniar os dados de um partiionamento espe!fio. 3o m!nimo1 ada !ndie lusterizado ter(uma unidade de aloação :3SOKS4%T% por partiionamento. O !ndie lusterizado tamb&m ter( uma unidade de aloação$O7S4%T% por partiionamento se ontiver olunas $O7 6ob)etos grandes8. Tamb&m ter( uma unidade de aloaçãoOKSOQEH$OKS4%T% por partiionamento se tiver olunas de omprimento vari(vel exedendo o limite de taman'o delin'a de >.Z bVtes.

    %s p(ginas da adeia de dados e as lin'as são lassifiadas pelo valor da 'ave de !ndie lusterizado. Todas as inserções

    são feitas no ponto em que o valor de 'ave da lin'a inserida se a)usta + sequ*nia de lassifiação entre as lin'asexistentes.

    Esta ilustração mostra a estrutura de um !ndie lusterizado em um Dnio partiionamento.

    Considerações sobre onsultas

    %ntes de riar !ndies lusterizados1 entenda omo seus dados serão aessados. Considere utilizar um !ndie lusterizadopara onsultas que façam o seguinte,

    etornam um intervalo de valores usando os operadores omo 7ETKEE3 N1 N e .

    4epois que a lin'a om o primeiro valor for enontrada usando o !ndie luster1 garante

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    8/18

    rapidamente a lin'a que ont&m o nDmero de ordem de vendas iniial e em seguida reuperar( todas as lin'assuessivas na tabela1 at& que o Dltimo nDmero de ordem de vendas se)a alançado.

    etornam grandes on)untos de resultados.

    5se l(usulas JO:3. 3ormalmente elas são olunas de 'ave estrangeira.

    5se l(usulas O4E 7 ou GO52 7.

    5m !ndie nas olunas espeifiadas na l(usula O4E 7 ou GO52 7 pode eliminar a neessidade de oMeanismo de 7ano de 4ados lassifiar os dados1 pois as lin'as )( estão lassifiadas. :sso mel'ora o desempen'oda onsulta.

    Considerações sobre olunas

    Geralmente1 vo* deve definir a 'ave de !ndie lusterizado om o menor nDmero de olunas poss!vel. Considere olunasque ten'am um ou mais dos seguintes atributos,

    "e)am exlusivas ou onten'am muitos valores distintos

    2or exemplo1 uma :4 de funion(rio identifia os funion(rios de maneira exlusiva. 5m !ndie lusterizado ou

    restrição 2:M% WE na oluna Em;l/eeID mel'oraria o desempen'o de onsultas que pesquisam informaçõesde funion(rio om base no nDmero de :4 do funion(rio. Como alternativa1 um !ndie lusterizado poderia serriado em LastName1 FirstName1 5i##leName porque os registros dos funion(rios são agrupados e onsultados

    frequentemente dessa maneira e a ombinação dessas olunas ainda ofereeria um grau alto de diferença.

    "e)am aessadas sequenialmente

    2or exemplo1 um :4 de produto identifia produtos de maneira exlusiva na tabela *r/#+ti/n-*r/#+t no bano

    de dados %dventureKorUs-0- . Consultas nas quais uma pesquisa sequenial se)a espeifiada1 tais omo WHERE

    *r/#+tID 6ETWEEN

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    9/18

    armazenamento dos dados da tabela. Qo* pode riar v(rios !ndies não lusterizados em uma tabela ou exibição indexada.Em geral1 os !ndies não lusterizados devem ser riados para aprimorar o desempen'o de onsultas utilizadas omfrequ*nia que não são obertas pelo !ndie lusterizado.

    "emel'ante + maneira omo o !ndie de um livro & usado1 o otimizador de onsulta proura um valor de dados pesquisandoo !ndie não lusterizado para enontrar o loal do valor de dados na tabela e1 depois1 reupera os dados diretamentedaquele loal. :sso faz om que os !ndies não lusterizados se)am a opção ideal para onsultas de orrespond*nia exata1uma vez que o !ndie ont&m entradas que desrevem o loal preiso na tabela dos valores de dados pesquisados pelasonsultas. 2or exemplo1 para onsultar a tabela H+manRes/+res- Em;l/ee de todos os funion(rios que reportam para

    um determinado gerente1 o otimizador de onsulta pode usar o !ndie não lusterizado I:Em;l/ee5ana,erID1 que tem5ana,erID omo sua oluna de 'ave. O otimizador de onsulta pode loalizar rapidamente todas as entradas no !ndie

    que orrespondem ao 5ana,erID espeifiado. Cada entrada do !ndie aponta para a p(gina e a lin'a exatas na tabela ou

    !ndie lusterizado1 em que os dados orrespondentes podem ser loalizados. 4epois que o otimizador de onsulta loalizartodas as entradas no !ndie1 poder( ir diretamente para a p(gina e a lin'a exatas e reuperar os dados.

    %rquitetura de !ndie não lusterizado

    Os !ndies não lusterizados t*m a mesma estrutura de (rvore 7 que os !ndies lusterizados1 om exeção das seguintesdiferenças signifiativas,

    %s lin'as de dados da tabela sub)aente não são lassifiadas nem armazenadas em ordem om base nas suas'aves não lusterizadas.

    % amada de fol'a de um !ndie não lusterizado & onstitu!da de p(ginas de !ndie1 em vez de p(ginas de dados.

    Os loalizadores de lin'a1 em lin'as de !ndie não lusterizado1 são um ponteiro para uma lin'a ou uma 'ave de !ndielusterizado para uma lin'a1 omo desrito a seguir.

    "e a tabela for um 'eap1 ou se)a1 se não tiver um !ndie lusterizado1 o loalizador de lin'a ser( um ponteiro para alin'a. O ponteiro & riado a partir do :4 6identifiador81 do nDmero da p(gina e do nDmero da lin'a na p(gina doarquivo. O ponteiro inteiro & on'eido omo :4 6:dentifiação de $in'a8.

    "e a tabela tiver um !ndie lusterizado1 ou o !ndie estiver em uma exibição indexada1 o loalizador de lin'a ser( a'ave de !ndie lusterizado da lin'a.

    Os !ndies não lusterizados t*m uma lin'a em sVs.partitions om index(id N0 para ada partição usada pelo !ndie. 2orpadrão1 um !ndie não lusterizado tem uma Dnia partição. #uando um !ndie não lusterizado tem v(rias partições1 adapartição tem uma estrutura de (rvore 7 que ont&m lin'as de !ndie para aquela partição espe!fia. 2or exemplo1 se um!ndie não lusterizado tiver quatro partições1 'aver( quatro estruturas de (rvore 71 uma em ada partição.

    4ependendo dos tipos de dados no !ndie não lusterizado1 ada estrutura de !ndie não lusterizado ter( uma ou maisunidades de aloação para armazenar e gereniar os dados de uma partição espe!fia. 3o m!nimo1 ada !ndie nãolusterizado ter( uma unidade de aloação :3SOKS4%T% por partição que armazena as p(ginas de (rvore 7 do !ndie. O!ndie não lusterizado tamb&m ter( uma unidade de aloação $O7S4%T% por partição se ontiver olunas $O7 6ob)etos

    grandes8. %l&m disso1 ter( uma unidade de aloação OKSOQEH$OKS4%T% por partição se ontiver olunas deomprimento vari(vel que exedem o limite de taman'o de lin'a de >.Z bVtes.

    % ilustração a seguir mostra a estrutura de um !ndie não lusterizado em uma Dnia partição.

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    10/18

    Considerações sobre bano de dados

    Considere as arater!stias do bano de dados ao riar !ndies não lusterizados.

    Os banos de dados ou as tabelas om baixos requisitos de atualização1 mas volumes grandes de dados1 podem sebenefiiar de muitos !ndies não lusterizados para aprimorar o desempen'o da onsulta. Considere a riação de!ndies filtrados para subon)untos bem definidos de dados para aprimorar o desempen'o da onsulta1 reduzir osustos de armazenamento de !ndie e reduzir os ustos de manutenção de !ndie omparados a !ndies nãolusterizados de tabela ompleta.

    Os apliativos do "istema de "uporte a 4eisões e os banos de dados que ont*m fundamentalmente dadossomente leitura podem se benefiiar de v(rios !ndies não lusterizados. O otimizador de onsulta tem mais !ndiesdos quais seleionar para determinar o m&todo de aesso mais r(pido e as baixas arater!stias de atualização dobano de dados signifiam que a manutenção do !ndie não impedir( o desempen'o.

    Os apliativos de 2roessamento de Transações online e os banos de dados que ont*m tabelas om grandesatualizações devem evitar a superindexação. %diionalmente1 os !ndies deveriam ser restritos1 ou se)a1 om o m!nimoposs!vel de olunas.

    3Dmeros grandes de !ndies em uma tabela afetam o desempen'o das instruções :3"ET1 524%TE1 4E$ETE e MEGEporque todos os !ndies preisam ser a)ustados adequadamente + medida que os dados são alterados em umatabela.

    Considerações sobre onsultas

    %ntes de riar !ndies não lusterizados1 & reomendado entender omo os dados são aessados. Considere usar um !ndienão lusterizado para onsultas om os seguintes atributos,

    5se as l(usulas JO:3 ou GO52 7.

    Crie v(rios !ndies não lusterizados em olunas envolvidas em operações de )unção e de agrupamento e um !ndielusterizado em qualquer oluna de 'ave estrangeira.

    Consultas que não retornam grandes on)untos de resultados.

    Crie !ndies filtrados para abranger onsultas que retornam um subon)unto bem definido de lin'as de uma tabela

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    de 18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    11/18

    grande.

    Cont&m as olunas envolvidas frequentemente em ondições de pesquisa de onsulta1 omo a l(usula KLEE1 queretorna orrespond*nias exatas.

    Considerações sobre olunas

    Considere as olunas que ten'am um ou mais destes atributos,

    Cubra a onsulta.

    "ão obtidos gan'os de desempen'o quando o !ndie ont&m todas as olunas da onsulta. O otimizador de onsultapode loalizar todos os valores da oluna dentro do !ndie. Os dados de tabela ou de !ndie lusterizado não sãoaessados1 o que resulta em menos operações de EB". 5se !ndie om olunas inlu!das para adiionar olunas deobertura1 em vez de riar uma ampla 'ave de !ndie.

    "e a tabela tiver um !ndie lusterizado1 a oluna ou as olunas definidas no !ndie lusterizado serão anexadasautomatiamente ao final de ada !ndie não lusterizado da tabela. :sso pode produzir uma onsulta oberta semespeifiar as olunas de !ndie lusterizado na definição do !ndie não lusterizado. 2or exemplo1 se uma tabela tiverum !ndie lusterizado na oluna 01 um !ndie não lusterizado nas olunas 6 e A1 ter( omo olunas de valores de

    'ave6

    1A

     e0

    .

    Muitos valores distintos1 omo uma ombinação de sobrenome e nome1 aso um !ndie lusterizado se)a usado emoutras olunas.

    "e 'ouver pouos valores distintos1 omo apenas 0 e 1 a maioria das onsultas não usar( o !ndie porque umaverifiação de tabela &1 em geral1 mais efiaz. 2ara esse tipo de dados1 onsidere a riação de um !ndie filtrado emum valor diferente que oorra apenas em um nDmero pequeno de lin'as. 2or exemplo1 se a maioria dos valores for 1o otimizador de onsulta pode usar um !ndie filtrado para as lin'as de dados que ont*m 0.

    5sar olunas inlu!das para estender !ndies não lusterizadosQo* pode estender a funionalidade de !ndies não lusterizados aresentando olunas de não 'ave ao n!vel fol'a do

    !ndie não luster. %o inluir olunas não 'ave1 vo* pode riar vo* !ndies não lusterizados que abrangem maisonsultas. :sto porque as olunas não 'ave t*m os seguintes benef!ios,

    Elas podem ser tipos de dados não permitidos omo olunas de 'ave de !ndie.

    Eles não são onsiderados pelo Meanismo de 7ano de 4ados ao alular o nDmero de olunas de 'ave de !ndieou o taman'o da 'ave de !ndie.

    5m !ndie om olunas não 'ave inlu!das pode mel'orar o desempen'o de onsulta signifiativamente quando todas asolunas na onsulta forem inlu!das no !ndie omo olunas de 'ave ou não 'ave. Os gan'os de desempen'o sãoalançados pois o otimizador de onsulta pode loalizar todos os valores de oluna dentro do !ndie1 a tabela1 ou dados de!ndie lusterizado não são aessados1 resultando em pouas operações de EB" de diso.

     'servação

    #uando um !ndie ont&m todas olunas refereniadas pela onsulta1 ele ostuma ser refereniado omo se abrangendoa onsulta.

    Enquanto as olunas de 'ave são armazenadas em todos os n!veis do !ndie1 as olunas não 'ave são armazenadasapenas em n!vel fol'a.

    5sando olunas inlu!das para evitar limites de taman'oQo* pode inluir olunas não 'ave em um !ndie não lusterizado para evitar exeder as limitações do taman'o atual do

    !ndie1 de um m(ximo de 0Z olunas de 'ave1 e um m(ximo de taman'o 'ave de !ndie de [ bVtes. O Meanismo de7ano de 4ados não onsidera as olunas não 'ave ao alular o nDmero de olunas de 'ave de !ndie1 ou o taman'o da'ave do !ndie.

    2or exemplo1 supon'a que vo* quer indexar as olunas seguintes na tabela D/+ment,

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    e 18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    12/18

      Title n>arhar(?4)

      Re>isi/n nhar(?)

      FileName n>arhar(@44)

    Como os tipos de dados nc#ar e nvarc#ar exigem - bVtes para ada aratere1 um !ndie que ont&m essas tr*s olunasultrapassaria a limitação de taman'o de [ bVtes por 0 bVtes 6A// \ -8. %o usar a l(usula IN0L9DE da delaração 0REATE

    INDE: 1 a 'ave de !ndie pode ser definida omo uma oluna não 'ave 6Title1 Re>isi/n8 e FileName . 4esse modo1 o

    taman'o da 'ave de !ndie seria de 00 bVtes 6// \ -81 e o !ndie ainda onteria todas as olunas neess(rias. % seguintedelaração ria tal !ndie.

    9ndie om diretrizes das olunas inlu!das#uando vo* pro)eta !ndies não lusterizados om olunas inlu!das1 onsidere as seguintes diretrizes,

    %s olunas não 'ave estão definidas na l(usula :3C$54E da instrução CE%TE :34E.

    %s olunas não 'ave s; podem ser definidas em !ndies não lusterizados em tabelas1 ou em exibições indexadas.

    "ão permitidos todos os tipos de dados1 exeto text1 ntext e i!a"e.

    %s olunas omputadas que são determin!stias e preisas ou impreisas podem ser olunas inlu!das. 2ara obtermais informações1 onsulte 9ndies em olunas omputadas.

    %ssim omo om as olunas de 'ave1 as olunas omputadas derivadas dos tipos de dados i!a"e1 ntext1 e textpodem ser olunas não 'ave 6inlu!das81 desde que o tipo de dados da oluna omputada se)a permitido omo umaoluna de !ndie não 'ave.

    Os nomes das olunas não podem ser espeifiados na lista :3C$54E e na lista de oluna de 'ave.

    Os nomes das olunas não podem ser repetidos na lista :3C$54E.

    4iretrizes do taman'o da oluna

    2elo menos uma oluna de 'ave deve ser definida. O nDmero de m(ximo de olunas não 'ave & de 0-? olunas.Esse & o nDmero m(ximo de olunas de tabela menos 0.

    %s olunas de 'ave de !ndie1 exeto as não 'ave1 devem seguir as restrições de taman'o de !ndie de no m(ximo0Z olunas de 'ave1 e um taman'o total de 'ave de !ndie de no m(ximo [ bVtes.

    O taman'o total de todas as olunas não 'ave est( limitado somente pelo taman'o espeifiado das olunas nal(usula :3C$54E por exemplo1 as olunas varc#ar$!ax% estão limitadas a - G7.

    4iretrizes para modifiação de oluna#uando vo* modifia uma oluna de tabela que estava definida omo uma oluna inlu!da1 as restrições seguintes seapliam,

    %s olunas não 'ave não podem ser soltar das tabelas1 a menos que o !ndie se)a solto antes.

    %s olunas não 'ave não podem ser alteradas1 exeto para fazerem o seguinte,

    %lterar a nulidade da oluna da oluna 3OT 35$$ at& 35$$.

    %umentar o omprimento das olunas varc#ar1 nvarc#ar1 ou varinar& .

    0REATE INDE: I:D/+mentTitle

    .N *r/#+ti/n-D/+ment (Title1 Re>isi/n)

    IN0L9DE (FileName)8

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    de 18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    13/18

     'servação

    Estas restrições de modifiação de oluna tamb&m se apliam para indexar olunas de 'ave.

    eomendações de designedesen'e !ndies não lusterizados om um omprimento de 'ave de !ndie1 de tal forma que apenas as olunas usadaspara busas e pesquisas se)am olunas de 'ave. Haça todas as outras olunas que abrangem a onsulta olunas não 'aveinlu!das. 4este modo1 vo* ter( todas as olunas neess(rias para abranger a onsulta1 mas a 'ave de !ndie em si &

    pequena e efiiente.

    2or exemplo1 supon'a que vo* quer pro)etar um !ndie para abranger a onsulta seguinte.

    2ara abranger a onsulta1 ada oluna deve ser definida no !ndie. Embora vo* possa definir todas as olunas omoolunas de 'ave1 o taman'o 'ave seria de ??A bVtes. Em razão da Dnia oluna de fato usada omo rit&rio de pesquisa

    ser a oluna */stal0/#e1 que tem um omprimento de ? bVtes1 um mel'or design de !ndie definiria */stal0/#e omosendo a oluna de 'ave e inluiria todas as outras olunas omo olunas que não são olunas de 'ave.

    % seguinte delaração ria um !ndie om olunas inlu!das para abranger a onsulta.

    Considerações sobre desempen'oEvite a adição desneess(ria de olunas. %diionar muitas olunas de !ndie1 se)am elas 'ave ou não1 pode gerar asseguintes impliações no desempen'o,

    2ouas filas de !ndie se a)ustarão em uma p(gina. :sto poderia riar aumentos de EB" e efii*nia de a'e reduzida.

    "er( neess(rio mais espaço em diso para armazenar o !ndie. Em partiular1 aresentar os tipos de dadosvarc#ar$!ax%1 nvarc#ar$!ax%1 varinar&$!ax%ou x!l omo olunas de !ndie não 'ave pode aumentarsignifiativamente os requisitos de espaço em diso. :sto porque os valores de oluna são opiados no n!vel fol'a de!ndie. 2ortanto1 eles residem no !ndie e na tabela base.

    % manutenção do !ndie pode aumentar o tempo neess(rio para exeutar modifiações1 inserções1 atualizações ouexlusões1 para a tabela sub)aente ou exibição indexada.

    Qo* ter( que determinar se os gan'os no desempen'o de onsulta superam o efeito no desempen'o durante amodifiação de dados1 e em requisitos adiionais de espaço em diso.

     X:n!ioY

    4iretrizes de design de !ndie exlusivo

    5m !ndie exlusivo garante que a 'ave de !ndie não ont&m nen'um valor dupliado e1 portanto1 ada lin'a na tabela &

    exlusiva de algum modo. Espeifiar um !ndie exlusivo s; faz sentido quando a exlusividade for uma arater!stia dospr;prios dados. 2or exemplo1 se vo* quiser garantir que os valores na oluna Nati/nalIDN+mber na tabela

    H+manRes/+res-Em;l/ee se)am exlusivos1 quando a 'ave prim(ria for Em;l/eeID1 rie uma restrição 53:#5E na

    oluna Nati/nalIDN+mber. "e o usu(rio tentar digitar o mesmo valor naquela oluna para mais de um empregado1 ser(

    SELE0T A##ressLine"1 A##ressLine1 0it1 State*r/>ineID1 */stal0/#e

    FR.5 *ers/n-A##ress

    WHERE */stal0/#e 6ETWEEN N'

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    14/18

    exibida uma mensagem de erro e o valor dupliado não & inserido.

    Com !ndies exlusivos de multiolunas1 o !ndie garante que ada ombinação de valores na 'ave de !ndie & exlusivo.2or exemplo1 se um !ndie exlusivo for riado em uma ombinação de olunas LastName1 FirstName e 5i##leName1 duas

    lin'as na tabela não poderão ter a mesma ombinação de valores que essas olunas.

    Tanto os !ndies lusterizados quanto os não lusterizados podem ser exlusivos. Contanto que os dados na oluna se)amexlusivos1 vo* pode riar um !ndie lusterizado exlusivo e não lusterizado na mesma tabela.

    Os benef!ios dos !ndies exlusivos inluem o seguinte,

    % integridade de dados das olunas definidas & garantida.

    "ão forneidas informações Dteis adiionais ao otimizador de onsultas.

    Criar uma restrição 2:M% WE ou 53:#5E automatiamente gera um !ndie exlusivo nas olunas espeifiadas. 3ão '(nen'uma diferença signifiativa entre riar uma restrição 53:#5E e riar um !ndie exlusivo independente de umarestrição. % validação de dados oorre da mesma maneira e o otimizador de onsultas não diferenia entre um !ndieexlusivo riado por uma restrição ou manualmente. Entretanto1 vo* dever( riar uma restrição 53:#5E ou 2:M% WEna oluna quando o ob)etivo for a integridade de dados. Hazendo isso o ob)etivo do !ndie ser( laro.

    Considerações

    5m !ndie exlusivo1 uma restrição 53:#5E ou uma restrição 2:M% WE não poderão ser riados1 se existiremvalores de 'ave dupliados nos dados.

    "e os dados forem exlusivos e vo* quiser impor exlusividade1 riar um !ndie exlusivo em vez de um !ndie nãoexlusivo1 na mesma ombinação de olunas1 forneer( informações adiionais para otimizador de onsultas quepoder( produzir planos de exeução mais efiientes. Criar um !ndie exlusivo 6preferivelmente riando uma restrição53:#5E8 & reomend(vel nesse aso.

    5m !ndie não lusterizado exlusivo pode onter olunas não 'ave inlu!das. 2ara obter mais informações1 onsulte9ndie om olunas inlu!das.

     X:n!ioY

    4iretrizes de riação de !ndie filtrado

    5m !ndie filtrado & um !ndie não lusterizado otimizado1 riado espeialmente para onsultas que fazem seleções a partirde um subon)unto bem

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    15/18

    um grande nDmero de !ndies filtrados1 espeialmente quando eles ont*m dados que são raramente afetados. 4omesmo modo1 se um !ndie filtrado tiver apenas dados afetados om frequ*nia1 seu taman'o reduzido diminuir( ousto de atualização das estat!stias.

    Redução dos custos de ar!a,ena!ento do +ndice

    % riação de um !ndie filtrado pode reduzir o armazenamento em diso de !ndies não lusterizados quando um!ndie de tabela ompleta não & neess(rio. ] poss!vel substituir um !ndie não lusterizado de tabela ompleta porv(rios !ndies filtrados sem aumentar de forma signifiativa os requisitos de armazenamento.

    Os !ndies filtrados são Dteis quando as olunas ont*m subon)untos de dados bement+reW/rs4" tem uma tabela *r/#+ti/n-6ill.!5aterials om -.Z^[ lin'as. %oluna En#Date tem apenas 0[[ lin'as que ont*m um valor não 35$$ e outras -.A> lin'as que ont*m 35$$. O !ndie

    filtrado a seguir abrange onsultas que retornam as olunas definidas no !ndie e que seleionam apenas lin'as om valornão 35$$ para En#Date.

    O !ndie filtrado FI6ill.!5aterialsWithEn#Date & v(lido para a onsulta a seguir. Qo* pode exibir o plano de exeuçãoda onsulta para determinar se o otimizador de onsulta usou o !ndie filtrado.

    0REATE N.N0L9STERED INDE: FI6ill.!5aterialsWithEn#Date

      .N *r/#+ti/n-6ill.!5aterials (0/m;/nentID1 StartDate)

      WHERE En#Date IS N.T N9LL 8

    B.

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx

    de 18 21/09/2014 09:39

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    16/18

    2ara obter mais informações sobre omo riar !ndies filtrados e definir a expressão de prediado do !ndie filtrado1

    onsulte Criar !ndies filtrados.9ndies filtrados para dados 'eterog*neos#uando a tabela ont&m lin'as de dados 'eterog*neos1 & poss!vel riar um !ndie filtrado para uma ou mais ategorias dedados.

    2or exemplo1 a ada produto listado na tabela *r/#+ti/n-*r/#+t & atribu!do um *r/#+tS+bate,/rID que1 por sua

    vez1 est( assoiado +s ategorias de produtos 7iUes1 Components1 Clot'ing ou %essories. Essas ategorias são'eterog*neas porque os valores das oluna da tabela *r/#+ti/n-*r/#+t não estão estreitamente orrelaionados. 2or

    exemplo1 as olunas 0/l/r1 Re/r#er*/int1 List*rie1 Wei,ht1 0lass e Stle t*m arater!stias exlusivas para ada

    ategoria de produto. "upon'a que 'a)a onsultas frequentes sobre aess;rios que possuem subategorias entre -^ e ?Z. ]poss!vel aprimorar o desempen'o das onsultas sobre aess;rios riando um !ndie filtrado nas subategorias deaess;rios1 onforme ilustrado no exemplo a seguir.

    O !ndie filtrado FI*r/#+tAess/ries abrange a seguinte onsulta porque os resultados da onsulta

    estão ontidos no !ndie e o plano da onsulta não inlui uma pesquisa de tabela base. 2or exemplo1 a expressão deprediado da onsulta *r/#+tS+bate,/rID = CC & um subon)unto do prediado de !ndie filtrado

    *r/#+tS+bate,/rID =  e *r/#+tS+bate,/rID = CG1 as olunas *r/#+tS+bate,/rID e List*rie no

    prediado de onsulta são ambas olunas de 'ave no !ndie1 e o nome & armazenado no n!vel fol'a do !ndie omo umaoluna inlu!da.

    Colunas de 'ave

    5ma pr(tia reomendada & inluir um pequeno nDmero de olunas de 'ave ou inlu!das em uma definição de !ndiefiltrado e inserir apenas as olunas neess(rias para o otimizador de onsulta esol'er o !ndie filtrado para o plano deexeução da onsulta. O otimizador de onsulta pode esol'er um !ndie filtrado para a onsulta1 independentemente deele abranger ou não a onsulta. 3o entanto1 & mais prov(vel que o otimizador de onsulta esol'a um !ndie filtrado se eleabranger a onsulta.

    Em alguns asos1 um !ndie filtrado abrange a onsulta sem inluir as olunas na expressão do !ndie filtrado omo olunasde 'ave ou inlu!das na definição do !ndie filtrado. %s diretrizes a seguir expliam quando uma oluna em uma expressãode !ndie filtrado deve ser uma oluna de 'ave ou inlu!da na definição do !ndie filtrado. Os exemplos se referem ao!ndie filtrado FI6ill.!5aterialsWithEn#Date que foi riado anteriormente.

    % oluna na expressão do !ndie filtrado não preisar( ser uma oluna de 'ave ou inlu!da na definição do !ndie fi ltrado1se a expressão do !ndie filtrado for equivalente ao prediado da onsulta e a onsulta não retorn(

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    17/18

    % oluna na expressão de !ndie filtrado dever( ser uma oluna de 'ave ou inlu!da na definição do !ndie filtrado se oprediado de onsulta us(

  • 8/16/2019 Guia de criação de índice do SQL Server.pdf

    18/18

    Contribuições da omunidade

    % movimentação da onversão de dados da esquerda para a direita de um operador de omparação pode alterar osignifiado da onversão. 3o exemplo anterior1 quando o operador CO3QET foi adiionado + direita1 a omparação mudoude uma omparação de nDmero inteiro para uma omparação varinar&.

    X:n!ioY

    $eitura adiional

    Mel'orando o desempen'o om exibições indexadas do "#$ "erver ->

    Tabelas e !ndies partiionados

    _ -0A Mirosoft

    0REATE INDE: TestTabIn#e$ .N #b/-TestTable(a1b)

    WHERE b = 0.NERT(arbinar(@)1 ")8

    a de criação de índice do SQL Server http://msdn.microsoft.com/pt-br/library/jj835095(v=sql.110).aspx