{"id":2206,"date":"2020-09-30T20:34:55","date_gmt":"2020-09-30T20:34:55","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=2206"},"modified":"2020-09-30T20:34:56","modified_gmt":"2020-09-30T20:34:56","slug":"tamano-de-tablas-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2206","title":{"rendered":"Tama\u00f1o de tablas en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas__D.png\" alt=\"\" class=\"wp-image-2207\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Tama\u00f1o de tablas SQL Server<\/h2>\n\n\n\n<p>En una base de datos en SQL Server la informaci\u00f3n es almacenada en las tablas, estas pueden llegar a convertirse en tablas grandes y es necesario considerar una partici\u00f3n horizontal en tablas que son grandes. (<a href=\"https:\/\/manualsqlserver.com\/?p=141\" target=\"_blank\" rel=\"noreferrer noopener\">Ver partici\u00f3n Horizontal de tablas<\/a>)<\/p>\n\n\n\n<!--more-->\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p>En este art\u00edculo se va a mostrar como listar las tablas y su tama\u00f1o de la base de datos abierta, la idea es tener un listado de las tablas ordenadas por el tama\u00f1o que ocupan en el disco, una vez que se obtiene el listado de las tablas se pueden tomar decisiones que permitan aumentar la efectividad de las consultas.<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Procedimiento almacenado sp_spaceused<\/strong><\/p>\n\n\n\n<p>Este procedimiento permite mostrar el espacio que ocupa una tabla.<br>Usando la base de datos AdventureWorks<br><strong>Use AdventureWorks<br>go<\/strong><\/p>\n\n\n\n<p class=\"has-normal-font-size\"><strong>Espacio de la tabla Address del esquema Person<\/strong><\/p>\n\n\n\n<p>Execute sp_Spaceused &#8216;Person.Address&#8217;<br>go<\/p>\n\n\n\n<p>El resultado en la imagen muestra el nombre de la tabla, la cantidad de registros, el espacio total reservado para la tabla, el espacio que ocupa los datos, el espacio de los \u00edndices y el espacio no utilizado. El resultado se muestra con la unidad de medida en KB.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_01.png\" alt=\"\" class=\"wp-image-2208\" width=\"725\" height=\"184\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_01.png 628w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_01-300x76.png 300w\" sizes=\"auto, (max-width: 725px) 100vw, 725px\" \/><\/figure>\n\n\n\n<p>El ejercicio va a listar todas las tablas de la base de datos y las almacenar\u00e1 en un cursor, luego usando el procedimiento almacenado sp_spaceused se va a llenar una tabla temporal. Para ubicar mejor la tabla se va a incluir el nombre del esquema.<\/p>\n\n\n\n<p>Para m\u00e1s informaci\u00f3n ver:<br><a href=\"https:\/\/manualsqlserver.com\/?p=120\" target=\"_blank\" rel=\"noreferrer noopener\">Tablas<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=158\" target=\"_blank\" rel=\"noreferrer noopener\">\u00cdndices<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=215\" target=\"_blank\" rel=\"noreferrer noopener\">Joins en Consultas<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=343\" target=\"_blank\" rel=\"noreferrer noopener\">Cursores<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=314\" target=\"_blank\" rel=\"noreferrer noopener\">Procedimientos almacenados<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=300\" target=\"_blank\" rel=\"noreferrer noopener\">Actualizar registros<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=424\" target=\"_blank\" rel=\"noreferrer noopener\">Tablas temporales<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=141\" target=\"_blank\" rel=\"noreferrer noopener\">Partici\u00f3n horizontal de tablas<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Ver el tama\u00f1o de las tablas en AdventureWorks<\/strong><\/p>\n\n\n\n<p>Use AdventureWorks<br>go<\/p>\n\n\n\n<p><strong>Set nocount on<br>DECLARE cursorTablas Cursor for<br>SELECT S.name + &#8216;.&#8217; + O.name, S.name<br>from sys.schemas As S<br>Join sys.objects As O on O.schema_id = S.schema_id<br>Where O.type = &#8216;U&#8217;<br>&#8212; Tabla temporal para los resultados de las tablas de la BD<br>&#8212; Tipo de dato sysname se utiliza para los nombres de las tablas.<br>Drop table if exists #Tablas<br>Create table #Tablas<br>(TablaNombre sysname,<br>TablaRegistros nvarchar(50),<br>TablaReservado nvarchar(20),<br>TablaDatos nvarchar(20),<br>TablaIndice nvarchar(20),<br>TablaNoUsado nvarchar(20),<br>TablaEsquema nvarchar(128))<br>&#8211;Recorremos el cursor obteniendo la informaci\u00f3n de espacio ocupado<br>Declare @NombreTablaConEsquema As Sysname, @NombreEsquema As nvarchar(128)<br>Open cursorTablas<br>Fetch cursorTablas into @NombreTablaConEsquema, @NombreEsquema<br>While (@@FETCH_STATUS = 0)<br>Begin<br>&#8212; Print @NombreTabla + space(10)+ @NombreEsquema<br>Insert into #Tablas<br>(TablaNombre, TablaRegistros, TablaReservado,<br>TablaDatos, TablaIndice , TablaNoUsado )<br>Execute sp_spaceused @NombreTablaConEsquema<br>&#8212; Actualizar el nombre del esquema<br>Update #Tablas<br>set TablaEsquema = Left(@NombreTablaConEsquema,CHARINDEX(&#8216;.&#8217;,@NombreTablaConEsquema)-1)<br>where TablaNombre = Right(@NombreTablaConEsquema,Len(@NombreTablaConEsquema)-CHARINDEX(&#8216;.&#8217;,@NombreTablaConEsquema))<br>Fetch cursorTablas into @NombreTablaConEsquema , @NombreEsquema<br>End<br>Close cursorTablas<br>Deallocate cursorTablas<br>&#8212; Los tama\u00f1os aparecen con la unidad \u00abKB\u00bb, se van a eliminar los<br>&#8212; tres \u00faltimos caracteres para poder obtener los valores.<br>UPDATE<br>#Tablas<br>SET<br>TablaReservado = LEFT(TablaReservado,LEN(TablaReservado)-3),<br>TablaDatos = LEFT(TablaDatos,LEN(TablaDatos)-3),<br>TablaIndice = LEFT(TablaIndice,LEN(TablaIndice)-3),<br>TablaNoUsado = LEFT(TablaNoUsado,LEN(TablaNoUsado)-3)<br>&#8211;Ordenamos la informaci\u00f3n por el tama\u00f1o ocupado<br>SELECT<br>TablaNombre As &#8216;Nombre de la tabla&#8217;,<br>TablaEsquema As &#8216;Esquema&#8217;,<br>TablaReservado As &#8216;Tama\u00f1o en Disco&#8217;,<br>TablaRegistros As &#8216;Cantidad de registros&#8217;,<br>TablaDatos As &#8216;Espacio datos&#8217;,<br>TablaIndice As &#8216;Espacio de \u00edndices&#8217;,<br>TablaNoUsado As &#8216;No usado&#8217;<br>From #Tablas<br>ORDER BY Convert(Numeric(9,2),TablaReservado) Desc<br>go<\/strong><\/p>\n\n\n\n<p>El resultado se muestra en la figura siguiente<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_02-1024x630.png\" alt=\"\" class=\"wp-image-2209\" width=\"762\" height=\"468\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_02-1024x630.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_02-300x185.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_02-768x473.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_02-703x433.png 703w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_02.png 1300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\" \/><\/figure>\n\n\n\n<p><strong>Importante:<br><\/strong>Para extraer por separado el nombre de la tabla y el nombre del esquema se ha utilizado la funci\u00f3n <strong>Charindex<\/strong> para buscar el punto que separa  ambos nombres guardados en el cursor en la variable @NombreTablaConEsquema<\/p>\n\n\n\n<p>El c\u00f3digo siguiente muestra como separar ambos nombres, considerando que la tabla se almacena en la variable  @Dato, el esquema es RecursosHumanos y la tabla es Empleados<\/p>\n\n\n\n<p>Declare @Dato nvarchar(100) = &#8216;RecursosHumanos.Empleados&#8217;<br>select CHARINDEX(&#8216;.&#8217;,@Dato) As &#8216;Ubicaci\u00f3n del punto&#8217;<br>Select Left(@Dato,CHARINDEX(&#8216;.&#8217;,@Dato)-1) As &#8216;Nombre del Esquema&#8217;<br>Select Right(@Dato,Len(@Dato)-CHARINDEX(&#8216;.&#8217;,@Dato)) As &#8216;Nombre de la Tabla&#8217;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_03.png\" alt=\"\" class=\"wp-image-2210\" width=\"621\" height=\"468\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_03.png 374w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/09\/ManualSQL_VerEspacioTablas_03-300x226.png 300w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Tama\u00f1o de tablas SQL Server En una base de datos en SQL Server la informaci\u00f3n es almacenada en las tablas, estas pueden llegar a convertirse en tablas grandes y es necesario considerar una partici\u00f3n horizontal en tablas que son grandes. (Ver partici\u00f3n Horizontal de tablas)<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2206\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2207,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[70,155,252,253],"class_list":["post-2206","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","category-esquemastablas","tag-cursor","tag-declare","tag-size","tag-tamano-de-tablas-sql-server","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2206"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2206\/revisions"}],"predecessor-version":[{"id":2211,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2206\/revisions\/2211"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2207"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}