Hola Fernando No soy experto en el tema, por ahora trato de llevarme de lo que encuentro
- La tabla esta particionada por meses - indices en el imei y fecha - no se manejo de historicos saludos El 30 de septiembre de 2013 11:31, Rodriguez Fernando<[email protected]>escribió: > El 30/09/2013 01:16 p.m., Carlos Eduardo Sotelo Pinto escribió: > > Hola Alvaro > > He solucionado parcialmente el problema haciendo una consulta del tipo > > arr := regexp_split_to_array(_imeis, E'\\s+'); > RETURN QUERY > SELECT > gpstracking_device_tracks..... > FROM ( > SELECT > gpstracking_device_tracks...... > ROW_NUMBER() OVER(PARTITION BY gpstracking_device_tracks.imei ORDER BY > gpstracking_device_tracks.date_time_process DESC) as rnumber > FROM gpstracking_device_tracks > WHERE gpstracking_device_tracks.imei = ANY(arr) > AND gpstracking_device_tracks.date_time_process >= date_trunc('hour', > now()) > AND gpstracking_device_tracks.date_time_process <= NOW() > ) AS gpstracking_device_tracks > WHERE gpstracking_device_tracks.rnumber = 1; > > Y ahora estoy leyendo un poco de tuning, ya que no soy un dba ni menos > un experto en optimización, pero espero pueda mejorar aun más el rendimiento > > Muchas gracias por la ayuda de todos > > > > > El 30 de septiembre de 2013 11:12, Alvaro Herrera<[email protected] > > escribió: > >> Carlos Eduardo Sotelo Pinto escribió: >> >> > DECLARE >> > arr varchar[]; >> > BEGIN >> > arr := regexp_split_to_array(_imeis, E'\\s+'); >> > FOR i IN 1..array_length(arr, 1) LOOP >> > RETURN QUERY >> >> Creo que deberías hacer una única consulta con todos los elementos del >> array, en lugar de una consulta para cada elemento. Es decir, elimina >> el LOOP y el LIMIT 1, y tu WHERE debería ser algo como >> >> ... >> >> > FROM gpstracking_device_tracks >> > WHERE gpstracking_device_tracks.imei = arr[i]::VARCHAR >> >> WHERE gpstracking_device_tracks.imei = ANY (arr) AND ... >> >> Vas a tener que solucionar de otra forma el que te retorne sólo una fila >> para cada imei, claro. >> >> -- >> Álvaro Herrera http://www.2ndQuadrant.com/ >> PostgreSQL Development, 24x7 Support, Training & Services >> > > > > -- > Carlos Eduardo Sotelo Pinto | http://carlossotelo.com | csotelo@twitter > GNU Linux Admin | PHP Senior Web Developer > Mobil: RPC (Claro)+51, 958194614 | Mov: +51, 959980794 > GTalk: [email protected] | Skype: csotelop > MSN: [email protected] | Yahoo: csotelop > GNULinux RU #379182 | GNULinux RM #277661 > GPG FP:697E FAB8 8E83 1D60 BBFB 2264 9E3D 5761 F855 4F6B > > que indices tenes en la tabla?, como están armados? > la tabla tiene históricos o la depuraras cada cierto tiempo? > > > Saludos Fernando > -- Carlos Eduardo Sotelo Pinto | http://carlossotelo.com | csotelo@twitter GNU Linux Admin | PHP Senior Web Developer Mobil: RPC (Claro)+51, 958194614 | Mov: +51, 959980794 GTalk: [email protected] | Skype: csotelop MSN: [email protected] | Yahoo: csotelop GNULinux RU #379182 | GNULinux RM #277661 GPG FP:697E FAB8 8E83 1D60 BBFB 2264 9E3D 5761 F855 4F6B
