Carlos T. Groero Carmona escribió: > Alvaro hice la function a partir de la idea que me distes, quizas no lo > entendi bien, solo que use 50 en lugar de 37. > esto es lo que me estas proponiendo? > > UPDATE table_1 > set colum_1 = false, > colum_2 = false, > colum_3 = false > WHERE (id % 37) > 0 and (id % 37)<=36
No. Quizás fui demasiado escueto. Lo que estaba proponiendo era un update con id % 37 = 0, luego otro (en otra transacción) con id % 37 = 1, luego id % 37 = 2, etc. Lo hice así con la esperanza de que las filas a actualizar se distribuyan uniformemente en la tabla, de manera que no todos los registros actualizados sean en las mismas páginas; así el siguiente update tiene más chances de hacer "hot update" para otros registros en las mismas páginas, reduciendo el trabajo que tendrá que hacer vacuum al final. Si haces "where id > foo and id < bar" entonces es muy probable que los registros actualizados estén todos juntos. Por eso el tiempo de espera entre un update y el siguiente también es importante; si el segundo update empieza inmediatamente después, es posible que no alcance a ser HOT debido a las transacciones concurrentes. No dijiste, creo, de qué tamaño era la tabla, ni los índices que tenía. > No he creado indices en esas columnas OK, eso permite que los update sean HOT. > tampoco seran llaves foraneas. Ya, pero acá la pregunta iba porque el UPDATE podría necesitar revisar las filas que referencian a las que sufren el update. Pero pensándolo bien, como las llaves UNIQUE/PK de tu tabla no cambian, esto no debería afectar. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services