mmmmm, a ver, dices que si a ese código le campo estas lineas:
Cita: qry = "SELECT * FROM "& Request("seleccion") &" Where UCase(pal) = '" & nuevonombre & "'"
set Tabla = Conexion.execute(qry)
If Tabla.BOF And Tabla.EOF Then 'si no esixte delete
hipervinculo=folder & "/" & file.name
Response.Write hipervinculo &" Eliminado. <br>"
objFSO.DeleteFile(hipervinculo)
end if
Por un Conexion.execute("INSERT INTO "& Request("seleccion") &" (Pal) VALUES ("&nuevonombre &")", no te bloquea nada.
Entonces lo tardado esta en la lectura las aproximadamente 360 mil veces, ¿es lógico no?
Yo en lo particular soy enemigo de hacer por medio de Web operaciones administrativas que se deberían ejecutar directamente desde una aplicación nativa de windows (un programa en otro lenguaje, que no use el IIS ni al IExplorer de intermediarios), pero si por la razón que sea esto es así, pues no creo que hay mucho que hacer asñi como lo tienes, hay que cambiar como haces las búsquedas.
No es lo mismo simplemente escribir 360 mil veces que buscar 360 mil veces un valor entre 360 mil registros y luego si existe, borrar un archivo y más si todo lo haces usando un intermediario como es el IIS para este caso.
Quitar el asterisco de la consulta es algo recomendable, para cualquier sentencia select; pero fuera de eso .... yo lo que intentaría hacer es regresar los 360 mil registros
una sola vez de manera ordenada por nombre, lo guardaría en un vector (getRows) y aplicaría un algoritmo de búsqueda binaria por cada nombre de archivo. Estoy seguro que eso reduciría un 1000% (o mas) el tiempo de respuesta de tu aplicación.
Claro que tienes que cambiarla un poco pero yo en tu lugar lo haría así
Saludos