Sto provando ad elaborare milioni di record dalla mia tabella (la dimensione è di circa 30 GB) e attualmente lo sto facendo usando il paging (mysql 5.1.36). La query che utilizzo nel ciclo for èelaborazione di un gran numero di voci del database con il paging rallenta con il tempo
select blobCol from large_table
where name= 'someKey' and city= 'otherKey'
order by name
LIMIT <pageNumber*pageSize>, <pageSize>
Questo funziona perfettamente per circa 500K record. Ho una dimensione della pagina di 5000 che sto usando e dopo la pagina 100, le query iniziano a rallentare drasticamente. Le prime ~ 80 pagine vengono estratte in 2-3 secondi, ma dopo circa 130 pagine, ogni pagina impiega circa 30 secondi per essere recuperata, almeno fino alla pagina 200. Una delle mie query ha circa 900 pagine e ciò richiederebbe troppo tempo.
The table structure is (type is MyISAM)
name char(11)
id int // col1 & col2 is a composite key
city varchar(80) // indexed
blobCol longblob
Cosa posso fare per accelerarlo? La spiegare per la query mostra questo
select_type: SIMPLE
possible_keys: city
key : city
type: ref
key_len: 242
ref: const
rows: 4293720
Extra: using where; using filesort
In caso aiuta, il my.cnf per il mio assistente (24 GB di RAM, 2 Quad proc anime) ha queste voci
key_buffer_size = 6144M
max_connections = 20
max_allowed_packet = 32M
table_open_cache = 1024
sort_buffer_size = 256M
read_buffer_size = 128M
read_rnd_buffer_size = 512M
myisam_sort_buffer_size = 128M
thread_cache_size = 16
tmp_table_size = 128M
max_heap_table_size = 64M
Vorrei suggerire sguardo in Sospensione (proiezioni) [http://docs.jboss.org/hibernate/ core/3.3/reference/it/html/querycriteria.html # querycriteria-projection]. Anche trovato su SO che non usa le proiezioni http://stackoverflow.com/questions/168084/is-there-a-more-efficient -way-of-making-pagination-in-hibernate-than-executing-se – Shahzeb
Sto eseguendo questo attraverso l'API createSQLQuery, non createQuery che utilizza le entità hiberate. Ho provato a utilizzare i metodi createCriteria e ha causato alla mia JVM l'eliminazione delle eccezioni di memoria poiché conservava tutti i dati in memoria. Questo almeno funziona, anche se è un po 'lento – randomThought