After a few off-list e-mails with Tim, I issued

ALTER TABLE dbmail_messageblks ADD INDEX ( blocksize AND physmessage_id );

which took almost 11 hours to index.  Once done, however, my select
statement went from a hair over 50 minutes to 15 seconds.  (1.69 seconds
after the index was cached.)

Wow.

Thanks for the help, all!

-Ken


On Wed, June 24, 2009 12:03 pm, Little, Timothy wrote:
> To answer your questions in no particular order, YES you can speed it up
> with indexing.
>
> You might want to first create an index on ( blocksize AND
> physmessage_id ).
>
> Why, you might ask, index on physmessage_id?  Because then the db won't
> have to do a fetch on items from the table since it's in the INDEX itself,
> saving any unnecessary reads.
>
> Realistically, I can't see that taking more than a few seconds, at most,
> to execute.  However, making the index might take a serious bit of time.
>
> Please let us all know how it does or does not work.
>
>
> Tim...
>
>
> -----Original Message-----
> From: Ken D'Ambrosio [mailto:k...@jots.org]
> Sent: Wednesday, June 24, 2009 11:07 AM
> To: mysql@lists.mysql.com
> Subject: Indexing? (Warning: relative newbie.)
>
>
> Hi, all.  I'm a long-time MySQL user who's only recently had to start
> learning some administrative stuff, largely because I finally have a
> decently-sized database.  My database is about 100 GB; I'm using it -- via
>  dbmail (www.dbmail.org) -- as a mail server for my company.  While dbmail
>  is well-and-good with its IMAP front-end, I'm thinking of writing a
> Python
> front-end to do some queries directly against MySQL.  But some of them take
> a l-o-n-g time.  As an example, I've got a table with slightly over a
> million records; I'd like to be able to show (say) only IDs of messages
> under a half-MB.  The query would look something like this:
>
> select physmessage_id,blocksize from dbmail_messageblks where blocksize <
> 500000;
>
>
> That query takes 50 minutes.  A smidge long to wait.
>
>
> So I said, "Huh.  That's impressive."  And I tried it without the
> physmessage_id:
> select blocksize from dbmail_messageblks where blocksize < 500000;
>
> That took 14 seconds.  A bit more in my timeframe.  Can I optimize this
> with indexing?  Should I be using a different DB engine?  Is there a
> site/book I should be learning DBA fundamentals from that might offer me
> direction for stuff like this?
>
> Sorry for all the newbie questions, but I haven't done serious database
> stuff since Foxbase/dBase III days.  Things have changed a little since
> then.
>
> Thanks!
>
>
> -Ken
>
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is believed to be clean.
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=tlit...@tgrnet.com
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=...@jots.org
>
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is believed to be clean.
>
>



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to