Phil,
What happens if you drop the index when you do the update? Does it run faster? If so then the index is slowing you down. Try increasing the key_buffer_size to 756M. If there isn't much difference, try the update without the "Order By" clause. If it runs considerably faster, then you need to increase your sort_buffer_size. See the link http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html for more info on optimizing the sort.

BTW, I would definitely change the VarChar(10) to Char(10) because fixed length records should be faster.

Mike

At 06:49 PM 2/7/2008, Phil wrote:
I'm trying to write an update which generates ranking data for a table.

Table is as follows

CREATE TABLE `A` ( `id` INT NOT NULL ,
`score` DOUBLE NOT NULL ,
`projrank` INT NOT NULL ,
`other` VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM

Real table actually contains 30 or so more fields but it gives a similar
issue

Score changes often, so 4 times per day I want to re-rank the data.

Primary index is on score desc, id

So I run the following

set @rank:=0;
update A set [EMAIL PROTECTED]:=rank+1 order by score desc,id

For 20,000 rows the update takes 0.8 seconds



For 50,000 rows it takes 1.9 seconds
For 140,000 rows it takes ~ 5 seconds

Scale up to 400,000 and it takes 7 minutes??

I'm sure it's probably some setting in my.cnf but I've tweaking them to no
avail. Currently I have them set as follows

key_buffer_size=256M
max_allowed_packet=16M
thread_stack=128K
thread_cache_size=8
sort_buffer_size=48M
join_buffer_size=3M
read_buffer_size=4M
query_cache_size=4M
query_cache_limit=4M
table_cache=100
max_connections=20
max_heap_table_size=64M
myisam_sort_buffer_size=64M

which is probably too high in places.

Ideas? The full table actually has 1.7M rows in it which takes over an hour
to update.. I've been puzzling on this for weeks now.

Server is a 4core opteron 275 with 2Gb ram

Thanks

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to