Hi,

I think you'd better add an unique ID to both table defined as int
corresponding to each seq_ID, and then do the join on this ID rather than on
Seq_ID (join on varchar is far from the fastest solution :)) (unless seq_ID
could be converted into int directly ?)

(but it takes time, even for me (bi athlon MP 2200+) :


mysql> SELECT COUNT(*) FROM searchmainhardwarefr7 LEFT JOIN
searchjoinhardwarefr7 ON
searchjoinhardwarefr7.numreponse=searchmainhardwarefr7.numreponse;
+----------+
| COUNT(*) |
+----------+
| 39396361 |
+----------+
1 row in set (3 min 23.15 sec)

mysql> EXPLAIN SELECT COUNT(*) FROM searchmainhardwarefr7 LEFT JOIN
searchjoinhardwarefr7 ON
searchjoinhardwarefr7.numreponse=searchmainhardwarefr7.numreponse;
+----+-------------+-----------------------+--------+---------------+-------
-----+---------+----------------------------------+----------+-------------+
| id | select_type | table                 | type   | possible_keys | key
| key_len | ref                              | rows     | Extra       |
+----+-------------+-----------------------+--------+---------------+-------
-----+---------+----------------------------------+----------+-------------+
|  1 | SIMPLE      | searchmainhardwarefr7 | index  | NULL          |
numreponse |       4 | NULL                             | 39396576 | Using
index |
|  1 | SIMPLE      | searchjoinhardwarefr7 | eq_ref | numreponse    |
numreponse |       4 | searchmainhardwarefr7.numreponse |        1 | Using
index |
+----+-------------+-----------------------+--------+---------------+-------
-----+---------+----------------------------------+----------+-------------+
)


Regards,
  Jocelyn
----- Original Message -----
From: "Qunfeng Dong" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, December 18, 2002 9:17 PM
Subject: Re: Can MySQL handle 120 million records? - Ok, If you guys really
can handle tens of millions records, you have to help me to enjoy MySQL too
:-)


> Boy, you guys are die-hard MySQL fans :-) I think your
> strong defending convinced us MySQL can handle 120
> million records :-) But I know some ordinary users out
> there like me who are not experts on tuning the MySQL
> performance (they did send me private emails saying
> they encountered the similar slow join problem). So
> please help us to keep the faith.
>
> We are trying to develop a simple biology database to
> maintain some DNA Sequence information. My problem is
> coming from the following two tables:
>
> CREATE TABLE NewSequence
> (
>         Seq_ID          varchar(50)     NOT NULL,
>         GenBank_Acc     varchar(10),
>         Organism        varchar(50)     NOT NULL,
>         Seq_Type  enum("EST","GSS","EST Contig","EST
> Singlet","GSS Contig","GSS Singlet","GSS Plasmid
> Contig","Protein") NOT NULL,
>         Seq_Length      int             NOT NULL,
>         Seq_Title       text            NOT NULL,
>         Comment         text,
>         Entry_Date      date            NOT NULL,
>         PRIMARY KEY     (Seq_ID),
>         UNIQUE  (GenBank_Acc),
>         INDEX (Seq_Type),
>         INDEX (Organism)
> );
>
> This NewSequence table is used to track some general
> info about sequence. Notice I have to use text
> datatype to describe "Comment" and "Seq_Title" fields;
> therefore I have to use varchar for other string
> fields. In addition, the Seq_ID is not numerical.
> BTW, I found indexing on Seq_Type. Organism which are
> very repeative still helps with accessing. This table
> has 2676711 rows.
>
>
> CREATE TABLE NewSequence_Homolog
> (
>         Seq_ID          varchar(50)     NOT NULL,
>         Homolog_PID     int             NOT NULL,
>         Homolog_Desc    varchar(50)     NOT NULL,
>         Homolog_Species varchar(50),
>         PRIMARY KEY     (Seq_ID, Homolog_PID)
> );
>
> This NewSequence_Homolog table is to track which
> protein sequences (homolog) are similar to the
> sequence I store in the NewSequence table. This table
> has 997654 rows.
>
> mysql> select count(*) from NewSequence s left join
> NewSequence_Homolog h on s.Seq_ID = h.Seq_ID;
> +----------+
> | count(*) |
> +----------+
> |  3292029 |
> +----------+
> 1 row in set (1 min 30.50 sec)
>
> So a simple left join took about 1 min and half.
> First, is this slow or I am too picky?
>
> This is the "Explain".
> mysql> explain select count(*) from NewSequence s left
> join NewSequence_Homolog h on s.Seq_ID = h.Seq_ID;
>
+-------+-------+---------------+---------+---------+----------+---------+--
-----------+
> | table | type  | possible_keys | key     | key_len |
> ref      | rows    | Extra       |
>
+-------+-------+---------------+---------+---------+----------+---------+--
-----------+
> | s     | index | NULL          | PRIMARY |      50 |
> NULL     | 2676711 | Using index |
> | h     | ref   | PRIMARY       | PRIMARY |      50 |
> s.Seq_ID |    9976 | Using index |
>
+-------+-------+---------------+---------+---------+----------+---------+--
-----------+
>
>
> I am running MySQL 3.23.49 on RedHat linux 7.3 on a
> dedicated server with 4 GB memory. The only setting I
> changed is to copy the my-huge.cnf into /etc/my.cnf.
>
> Qunfeng
>
> --- "Michael T. Babcock" <[EMAIL PROTECTED]>
> wrote:
> > Qunfeng Dong wrote:
> >
> > >not-so-good performance (join on tables much
> > smaller
> > >than yours takes minutes even using index) and I
> > seem
> > >to read all the docs I could find on the web about
> > how
> > >to optimize but they are not working for me (I am
> > >
> >
> > Have you stored a slow query log to run them through
> > 'explain' and see
> > why they're slow?  Do you want to post some of them
> > here so we can
> > suggest what might be done to make them faster?
> >
> > --
> > Michael T. Babcock
> > C.T.O., FibreSpeed Ltd.
> > http://www.fibrespeed.net/~mbabcock
> >
> >
>
>
> __________________________________________________
> Do you Yahoo!?
> Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
> http://mailplus.yahoo.com
>
> ---------------------------------------------------------------------
> 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
>
>
>
>


---------------------------------------------------------------------
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

Reply via email to