Você está na página 1de 23

Inicio

Categoras
BasesdeDatos
MsAccess
Firebird
MsSQL
PostgreSQL
MySQL
Oracle
Informix
SQLite
MariaDB
Lenguajes
Ajax
ASP.net
C++
C#.Net
CSS
Delphi
HTML
GTK
GWT
Java
ADF
EJB
Hibernate
VB.Net
Apache
Empresas
Google
Microsoft
Encriptado
AES
Escritorios
Gnome
KDE
EXTJS
Reporteadores
CrystalReports
FastReport
JasperReport
ReportingService
Hardware
AceleradorasGraficas
Gabinetes
IDE

CodeGear
Dreamweaver
SQLServerManagementStudio
Eclipse
JDeveloper
NetBeans
VisualStudio
IIS
JBoss
SistemasOperativos
Android
GNU/Linux
Ubuntu
openSuSE
Windows
WindowsServer
Solaris
Mac
Maemo
Plataformas
Consola
Desktop
Web
Seguridad
Tutoriales
SobreelSitio
Registrarse
Login
FollowonTwitter

Tutorialbsicoparainterpretarel
plandeejecucindeSQLServer
Megusta

Tweet

PararealizarSQLTunninganuestrasbasesdedatos,enlamayorade
loscasosnecesitaremospacienciaytiempoparaanalizarcondetenimiento
comoestfuncionandotodo,asenbaseaeso,determinarmedidasde
accinparalaoptimizacin.
ParaverelplandeejecucindeunqueryesmuysencilloenSSMS,
podemosverelEstimadoyelReal:
PlandeEjecucinEstimado:DesdeelMenConsultas>MostrarPlan
deEjecucinEstimadooconlacombinacindeteclasCtrl+L.Estono
ejecutarlaquerysinomsbienloanalizarymostrarunaaproximacin
delcostodesuejecucin.
PlandeEjecucinReal:DesdeelMenConsultas>IncluirPlande
EjecucinRealoconlacombinacindeteclasCtrl+M.Conestaopcin

podremosverelcostorealdeunaquery,peroadiferenciadelanterior,se
muestraalterminarlaejecucindelamisma.
Tambinotraopcinesejecutaresto,quenosmostrarenmodotextoel
plandeejecucin.
SETSHOWPLAN_ALL{ON|OFF}
Veamoslasdistintasopcionesquepuedenapareceryenquesituaciones
deberanhacerlo.

TableScan
Estoindicaqueelmotornecesitaleercompletamentelatablasinutilizar
unndice.Enlamayoradeloscasossuaparicinquieredecirque
estamoshaciendomallascosas,ynecesitamosurgentecrearunndiceo
reestructurarlosiyaexistealguno.Aunquenosiempreesas,elmotor
siempreintentapredecirloscostosdeejecucinbasadosen
lasestadsticasquevaalmacenando,sielestimaquevasermsrpido
leertodalatablaenvezdeleerunndice,usaresemtodo.Estosuele
sucedercontablaspocopobladasylaqueryencuestinnoconlleva
ningnfiltro,yaquereduceconsiderablementeeloverhead.Ejemplo:
SELECT*FROMtabla;

ClusteredIndexScan
EssemejantealTableScan,yaquerecorrecompletamentelatablapero
utilizandostavezalgunodelosndicesclustereddelquedispone.
Aparecenormalmenteentablasqueestnpobladasconsiderablemente.
Ejemplo:
SELECT*FROMtabla;

ClusteredIndexSeek
Verestoessntomadeuncorrectousodelosndicesclusteredenlabase
dedatos,paraverloenaccinsimplementetenemosquetrabajarconlos
camposquetienendices,Ejemplo:
SELECT*FROMtablaWHEREcolumna=44;

IndexScan
EsteesmuyparecidoalTableScanyClusteredIndexScan,laprincipal
diferenciaradicaenquesteutilizaunndiceNonClusteredpararecorrer
latabla.Justamenteparaestaseccinylasquevienenmsabajohace
unosdasescribunartculoquelesayudaradiferenciarentreunIndice
AgrupadoyunoNoAgrupado.Aunquemuchasvecessuelesersntoma
deunmalusodelosndices,tambinaparececuandousamoslasclusulas
ORDERBY,JOINoGROUPBY.Ejemplo
SELECTcolumnaNonClusteredFROMtablaORDERBYcolumnaNonClustered

IndexSeek

Yavasiendoobvioquehaceelindexseek,trabajaigualqueelClustered
IndexSeek,perotrabajarconunIndiceNonClustered.SiEjemplo:
SELECTcolumnaNonClusteredFROMtablaWHEREcolumnaNonClustered=44;

BookmarkLookup
Conloyavistoenelarticuloanteriorcomprenderemosmejorcomo
funcionaelBookmarkLookup.Debemoscomprenderquenopodremos
evitartenerestetipodeoperacinenlaBD,loquesisedebebuscares
queseamnimasuaparicinycuandolohace,lohagaconuncostobajo.
Esteaparececuandoserequierehacerunsaltodelapuntadordelndice
nonclusteredalapginasdedatosreal.Unadelasmanerasparaevitar
suaparicinexcesivaeslimitarloscamposrequeridosenlaquery,slo
solicitarlosqueestnincluidosenelndice,staeslaprincipalraznpor
laquehabrnescuchadomsdeunavez,noescribasquerysSELECT*
FROM...
Enalgunoscasosextremos(repito,muyextremos)sepodraconsiderarla
inclusindetodaslascolumnasdelatabladentrodelndice.

UnadelasmejorasqueseintrodujoapartirdeSQLServer2005,esque
enlosndicesNonClusteredsepuedenagregarocopiarelcontenidode
lascolumnas,sinqueestasseanpartedelndiceens,esdecir,queno
servirnpararealizarbsquedasnifiltrosperosicuandolosnecesite
mostrartendrunacopiaamanodelosdatos,sintenerlanecesidadde
usarelpunteroparabuscarenlatablaeldato.Estacaractersticaesun
armadedoblefilo,sibienesciertoquesiselousabienpodrareducir
considerablementeelcostodelasconsultas,perosulado
contraproducente,esquealtenermsdatoslosndices,estoscrecen
rpidamenteporqueocupanmsespacioyporendesetienenmenos
clavesporcadapginadendiceloquepodrallegaraaumentarelnivel

deI/O.Asque,debenconsiderarelcontextoparautilizarlo.

RIDLookup
Esteoperadornoesmuyfrecuentedever,ynormalmenteaparececuando
elmotorintentaoptimizarporsucuentalaqueryynotenemosunndice
agrupado(Clustered)entoncesbuscaratravsdelndicenicoROWID
(deahelnombreRID).Sirequieresolucinestetipodeoperacioneses
muydependientedecaso.Ejemplo
SELECTcolumna1,columna2FROMtablaWHEREcolumna1<100000;

Sort
Estaoperacinveremoscuandoelmotorrequiereordenaralgncampo
quenoestindizado,porejemplocuandoaplicamoslaclusulaORDER
BY,GROUPBY,TOP,etc.Normalmentecuandoaparecedebemos
echarojo,parasabersifaltaalgnndiceenalgunatabla,peronosiempre
esas,llenardendiceslaBDnoessanotampoco,yexistenocasionesque
debemosejecutarqueryspocofrecuentesquenoameritanlacreacinde
otrondicems.
SELECT*FROMtablaORDERBYcolumna;

JOIN
EloperadorJOINsedivideentrestiposdeJOINnuevamente.Entranen
accincuandojustamentesehacenusodelasclusulasJOINparaunirdos
omstablasenlaqueryyestdeterminadonormalmenteporelvolumen
dedatosconelquesetrabajarparaqueSQLServerelijausarunouotro.

NestedLoopJoin
Normalmentevemosesteoperadorcuandoelvolumendedatosconelque
setrabajaresrelativamentepequeo.Ejemplo.
SELECT*FROMtabla1t1INNERJOINtabla2t2ONt1.columna=t2.columna

MergeJoin
Esteoperadoraligualqueelanteriorsehacesuaparicinenlauninde
tablas,perocuandoelvolumendedatosesconsiderablementemsgrande,
hablamosdecientosdemilescomunmente
SELECT*FROMtabla1t1INNERJOINtabla2t2ONt1.columna=t2.columna;

HashJoin
EstetipodeJOINesmuyespecificoparagrandesvolmenesdedatos,
especialmentesinoestnindizados.SinosapareceennuestraBDOLTP,
deberamospreocuparnosyaqueestpensadoenfuncionarmejorensobre
losdiseosOLAP,asquesinoestntrabajandoconalgnDATA
WAREHOUSING,esmuypocoprobablequelesseatil.ElHashJoin
estodounmundoaparte,ymereceunartculodedicadonetamenteal,
asqueextenderemoseltemamsadelante.

HashMatch
Cuandovenesteoperadoresporqueelmotorestcompandocontenido,
puedeaparecerenunJOIN,WHEREysonlugaresdondenodeberan
estar,lohacenporfaltadeindicesprincipalmente.Dondesisonmuy
tilesescuandoincluimoslaclusulaDISTINCT,UNION,UNION
ALL,endondenosolosecomparaelvalordeuncampo,sinodetodoun
conjuntodecolumnasoinclusofilasycolumnas.

StreamAggregate
Apareceprincipalmentecuandoagrupamoslosdatos,ymezclamoscon
funcionesagregadascomoMIN,SUM,AVG,tambinconlaclusula
HAVING.Tambinesfrecuenteverqueesteoperadorllevaacompaado
aSORT,aquienutilizaparaordenarprimeramentelosdatosantesde
agrupar.
Paracomplementaryprofundizarestesencilloarticulo,existenmuchos
librosquepuedenleer.Lamayorpartedelabuenainformacinse
encuentraenInglesperovalelapenaleerlo.Lesdejounodeloslibros
gratuitosquetocaeltema,escritoporRedGate.


19

Youmayalsolike:

PAGINAR
FORZARAMODO
CREAR CONFIGURAR
CONSULTAS
IMPLCITOLAS
CONSULTAS
SQLSERVER
SQLCON
TRANSACCIONES
SQLCON
PARA
SQL
ENSQLSERVER
FILTROSALMACENAR
SERVER
DINMICOS
ELESTADO
Paginar
consultasSQL
conSQLServer
2012osuperior

Forzaramodo
Implcitolas
transaccionesen
SQLServer

CrearConsultas
SQLconfiltros
dinmicosde
maneraeficiente

COMO
EJECUTAR
SQL
DINMICO
ENSQL

GetRidofYour Comoejecutar
EyeBagsin
SQLdinmico
Minutes
enSQLServer
BeautyandSkin101

Tipspara
optimizarel
rendimientode
SQLServer

ConfigurarSQL
Serverpara
almacenarel
estadodela
sesinde
ASP.NET

Comodepurar
enSQLServer
2008pasoa
paso:
Procedimientos
almacenados,
triggersy
funciones

AdsbyShareaholic

4agosto2011
Ver5comentarios

PorGeekZero
ShortURL
BasesdeDatosMsSQLOptimizacionTutoriales

ComentariosdesdeFacebook:
Megusta A19personaslesgustaesto.Registrarteparaverqulesgustaatusamigos.

5comentarios

Ordenarpor Losmsantiguos

Agregaruncomentario...

FranciscoAngelJavierPrietoGerentePropietarioen
Creacionesintegrales
Realmenteunaplausodesdeelalmaparaelautordeestagua!!!
MegustaResponder

411deoctubrede201212:31

GabrielaFalcn
Excelentegua!!
MegustaResponder22deoctubrede201212:04

SergioA.GaticaM.TrabajaenIBot,SolucionesInformaticas
excelente.gracias!!
MegustaResponder20denoviembrede201215:06

NicolasPazFilgueiraBuenosAires
Buenisima!
MegustaResponder1demarzode201312:24

ElvinMartinezCornielleSantoDomingo
Muybuena.....
MegustaResponder

14dediciembrede20135:18

FacebookCommentsPlugin

Ver5comentarios

DejatuComentario

1.
Sebastian
25septiembre2013at09:06#
Muybuenainfo..Gracias!!
Responder
2.
Maritus
23julio2012at09:31#
Muchasgraciasporeltutorial,mevienedemaravilla,yaqueestoycomenzandoconestodeSQL
SERVER..
Responder

Responder

Trackbacks/Pingbacks
1. RendimientoenSQLSERVER|devblogdooflow

27marzo2015

[]http://devtroce.com/2011/08/04/tutorialbasicoparainterpretarelplandeejecucionde
sqlserver/[]
2. ClausulaINvsBETWEENAND[SQLTunning]|DevTroce.com

26julio2012

[]Paracomprenderstearticulorecomiendoquehagaunalecturaintroductoriasobrela
interpretacindelosplanesdeejecucinenSQLServer.Loquedemostraremosserlaventaja
enrendimientodelBETWEENANDsobrela[]
3. ComooptimizarlasquerysconclusulaLIKEenSQL[SQLTunning]|DevTroce.com
5agosto2011
[]SibienexistenvariosargumentosquepodemosagregaralLIKE,elmscomnypesado
eselcomodn(%).Esteproblema,siselopuedellamarasocurrenenSQLServer,Oracle,
PostgreyMySQL(probablementeenotrosmotorestambin,peronomeconstan)ascomola
solucinqueveremosaplicaatodosellos.Sirequierencomprenderelplandeejecucinpueden
leerloaqu.[]

Responder
YourName

B i

U del

YourEmail

YourURL

Code

Notificarmeamiemailsihaynuevoscomentarios

No soy un robot
reCAPTCHA
Privacidad - Condiciones

EnviarComentario
Buscasalgo?

BuscarconGoogle

Siguenos!

Buscar

Email:
RevisatucarpetaSpamsinotellegaelcorreo

Suscribirme,esgratis!

Categoras
Categoras Elegircategora

Histrico
Histrico Elegirmes

Etiquetas

UltimosComentados
newslnrdnr enComoprogramarennCapasconC#(Parte1)
newslnr enComoprogramarennCapasconC#(Parte1)

Martha enComocrearreportesconCrystalReportsenASP.NetySQLServer
Witness enTutorialdeProgramacinAndroid:ManejodeActivity
GISELLE enMostrarimagenalmacenadaenlabasededatosconAsp.Net
WashingtonPaul enComosaberqueproceso(PID)w3wp.exeperteneceacualAppPool
enIIS6
Victor enValidarCertificadoSSLconVB.NetyC#.Net
RendimientoenSQLSERVER|devblogdooflow enTutorialbsicoparainterpretarel
plandeejecucindeSQLServer
NotasTecnicas|Pearltrees enTipsparaoptimizarelrendimientodeSQLServer
vanessa enInstalarServidordeSubVersionenWindows

AvatarsbySterlingAdventures

Você também pode gostar