{"id":7517,"date":"2020-06-16T10:33:00","date_gmt":"2020-06-16T08:33:00","guid":{"rendered":"https:\/\/orizonold.dwebs.dev\/demo_wp\/?p=7517"},"modified":"2023-10-04T11:10:04","modified_gmt":"2023-10-04T09:10:04","slug":"utilidad-tecnica-en-base-datos-delete-masivos-vs-truncate","status":"publish","type":"expertise","link":"https:\/\/orizon.es\/en\/expertise\/utilidad-tecnica-en-base-datos-delete-masivos-vs-truncate\/","title":{"rendered":"Utilidad t\u00e9cnica en base datos \u2013 Delete masivos vs truncate"},"content":{"rendered":"<p><strong>\u2022 Permite encontrar mejoras sencillas para la sustituci\u00f3n de borrados masivos de registros en tablas.<\/strong><\/p>\n<p><strong>\u2022 El objetivo de esta detecci\u00f3n es disminuir el consumo y reducir la duraci\u00f3n de los procesos afectados.<\/strong><\/p>\n<p><strong>Detecci\u00f3n<\/strong><\/p>\n<p>En Oracle existen dos tipos de comandos capaces de llevar a cabo el borrado de las filas contenidas en una tabla, DELETE y TRUNCATE. Estos dos comandos est\u00e1n pensados para situaciones distintas, en el caso de DELETE se utiliza para realizar borrados de una parte de los datos de la tabla, mientras que la utilidad TRUNCATE se utiliza para un borrado completo de la misma. A pesar de ser distintos, ya que DELETE es considerado un comando de gesti\u00f3n de datos y el TRUNCATE un comando de definici\u00f3n de datos, el primero es capaz de obtener los mismos resultados que TRUNCATE si no se le aplican filtros durante la ejecuci\u00f3n, aunque de una forma mucho menos \u00f3ptima.<\/p>\n<p>El uso de la cl\u00e1usula DELETE para realizar el vaciado total de una tabla, puede suponer un problema de rendimiento, ya que se realizan una serie de pasos intermedios que implican un consumo de recursos sobre la instancia de BBDD. Estos pasos incluyen el escaneo completo de la tabla, la b\u00fasqueda de los bloques que alojan las filas, el reajuste de los \u00edndices de la tabla y la generaci\u00f3n de redo para poder deshacer el borrado en caso de fallo de la transacci\u00f3n, entre otros. Todos estos pasos, incrementan notablemente el tiempo necesario y el consumo de recursos para realizar el vaciado de una tabla<\/p>\n<p>Para aquellos casos en los que se quiere realizar un borrado total de la tabla, es mucho mejor usar la cl\u00e1usula TRUNCATE, ya que esta realiza un cambio de la marca de agua de la tabla para dejarla a cero y marca el espacio utilizado de la tabla como vac\u00edo. De este modo, se puede realizar un borrado completo de una tabla en menor tiempo y con menor consumo de recursos, optimizando la forma en la que llevar a cabo el mismo objetivo. Cabe destacar que este borrado es definitivo y los datos almacenados no se podr\u00e1n recuperar ni mediante rollback o flashback.<\/p>\n<p><strong>Comparativa y Resultados<\/strong><\/p>\n<p>Siguiendo la gu\u00eda de buenas pr\u00e1cticas integrada dentro de nuestra\u00a0<a href=\"https:\/\/orizonold.dwebs.dev\/metodologia\/\" rel=\"nofollow noopener\" target=\"_blank\">metodolog\u00eda<\/a>,\u00a0hemos aplicado en nuestros clientes la utilidad de este caso concreto, y para una tabla de m\u00e1s de 7 millones de filas, d\u00f3nde se borraba cada registro de uno en uno, hemos conseguido reducir un \u00a099% el tiempo de ejecuci\u00f3n (Elapsed) y m\u00e1s de un 95% el consumo de CPU aplicando la utilidad TRUNCATE en lugar de DELETE:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-13414 size-full\" src=\"https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-1.webp\" alt=\"\" width=\"796\" height=\"478\" srcset=\"https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-1.webp 796w, https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-1-300x180.webp 300w, https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-1-768x461.webp 768w\" sizes=\"(max-width: 796px) 100vw, 796px\" \/><\/p>\n<p>En conclusi\u00f3n, si tenemos la necesidad de vaciar una tabla de la que sabemos que sus datos no son necesarios, aplicar el comando TRUNCATE para el borrado es mucho m\u00e1s eficiente, ya que de esta forma no consumiremos recursos extra y el tiempo de ejecuci\u00f3n ser\u00e1 notablemente menor.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2022 Permite encontrar mejoras sencillas para la sustituci\u00f3n de borrados masivos de registros en tablas. \u2022 El objetivo de esta detecci\u00f3n es disminuir el consumo y reducir la duraci\u00f3n de los procesos afectados. Detecci\u00f3n En Oracle existen dos tipos de comandos capaces de llevar a cabo el borrado de las filas contenidas en una tabla, [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":8369,"menu_order":0,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-7517","expertise","type-expertise","status-publish","format-standard","has-post-thumbnail","hentry"],"uagb_featured_image_src":{"full":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete.webp",1024,560,false],"thumbnail":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-150x150.webp",150,150,true],"medium":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-300x164.webp",300,164,true],"medium_large":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete-768x420.webp",768,420,true],"large":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete.webp",1024,560,false],"1536x1536":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete.webp",1024,560,false],"2048x2048":["https:\/\/orizon.es\/wp-content\/uploads\/2020\/06\/delete.webp",1024,560,false]},"uagb_author_info":{"display_name":"horizon","author_link":"https:\/\/orizon.es\/en\/author\/maria\/"},"uagb_comment_info":0,"uagb_excerpt":"\u2022 Permite encontrar mejoras sencillas para la sustituci\u00f3n de borrados masivos de registros en tablas. \u2022 El objetivo de esta detecci\u00f3n es disminuir el consumo y reducir la duraci\u00f3n de los procesos afectados. Detecci\u00f3n En Oracle existen dos tipos de comandos capaces de llevar a cabo el borrado de las filas contenidas en una tabla,&hellip;","_links":{"self":[{"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/expertise\/7517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/expertise"}],"about":[{"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/types\/expertise"}],"author":[{"embeddable":true,"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/users\/4"}],"version-history":[{"count":2,"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/expertise\/7517\/revisions"}],"predecessor-version":[{"id":13498,"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/expertise\/7517\/revisions\/13498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/media\/8369"}],"wp:attachment":[{"href":"https:\/\/orizon.es\/en\/wp-json\/wp\/v2\/media?parent=7517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}