Joseph,
Thanks for the quick answer.
Very nice to know that adding an index forces a rebuild of all indices!
(Side note -- I was going to configure the database with a minimal set
of indices, and then watch to see how people use the database, and then
add indices on popular columns.)
I did not notice a lot of i/o activity, but will run vmstat for a while
and gather statistics
The machine has 1GB of RAM.
Here is the configuration:
bash-2.04$ more /etc/my.cnf
[mysqld]
datadir=/data/dp14.a/data/mysql
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
There is NO SETTING for key_buffer_size -- what value do you suggest?
Thanks,
Chris
Joseph Bueno wrote:
Chris Stoughton wrote:
I have a table with a few million rows, wth 633 columns. I want to
create 10 inidices on this table, six single-column and four
two-column inidices. The database will be loaded once and remain
static, and queried many times. Please note that this is a small
prototype for the actual database, which will have 40 times more rows.
I used two strategies to create these tables:
1. Create the indices in the create table statement
2. Load the table, and then use the create index statement for
each index.
With Strategy 1, the loading started nicely using the load data
infile command to load approx. 2000 records at a time. It took 3
seconds for each load data infile command. After a few hundred
load data infile commands, however, the time increased to two
minutes per command.
With Strategy 2, the loading went from start to finish at 3 seconds
for each load data infile command. But now, creating each index is
taking longer. Here is a log:
Fri Sep 20 15:17:43 CDT 2002 create index objId on bestTsObj (objId)
Fri Sep 20 15:35:51 CDT 2002 create index fieldId on bestTsObj (fieldId)
Fri Sep 20 15:56:02 CDT 2002 create index targetObjId on bestTsObj
(targetObjId)
Fri Sep 20 16:20:02 CDT 2002 create index ra on bestTsObj (ra)
Fri Sep 20 16:49:16 CDT 2002 create index decl on bestTsObj (decl)
Fri Sep 20 17:53:38 CDT 2002 create index u on bestTsObj (u)
Fri Sep 20 18:42:52 CDT 2002 create index g on bestTsObj (g)
Fri Sep 20 22:04:25 CDT 2002 create index r on bestTsObj (r)
Sat Sep 21 10:06:44 CDT 2002 create index i on bestTsObj (i)
Sat Sep 21 19:31:52 CDT 2002 create index z on bestTsObj (z)
Sun Sep 22 15:45:06 CDT 2002 create index ug on bestTsObj (u,g)
The first index was created in a reasonable amount of time (18
minutes), but it is taking longer to create more indices.
With both strategies, no process is swapping heavily, and mysqld is
not consuming available CPU cycles efficiently.
Can you suggest how I can build multiple indices on large tables
efficiently? Will it help to create a narrow table with only the
quantities I want to use in indices?
We have installed mysql via rpm:
bash-2.04$ mysqladmin
mysqladmin Ver 8.18 Distrib 3.23.36, for redhat-linux-gnu on i386
bash-2.04$ uname -r
2.4.18-xfs-1.1
bash-2.04$
What diagnostics do you suggest I run?
Thanks
Hi,
You should use strategy #1 since each time you create a new index, all
index are rebuilt (this is why each new index is taking longer in
strategy#2).
Since mysqld is not consuming CPU nor swapping, it is probably doing a
lot of disc I/Os. You can verify that with vmstat utility.
You didn't specify how much RAM you have and what mysql configuration
you are using (check /etc/my.cnf). You should pay special attention to
'key_buffer_size' parameter value since it has a major impact on index
performance.
Regards,
-
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php