> Den 27/10/2014 kl. 14.55 skrev Collin Anderson <[email protected]>: > > Hi Erik, > > No luck... > > mysql> show indexes in order_order; > +-------------+------------+----------------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ > | Table | Non_unique | Key_name | Seq_in_index | > Column_name | Collation | Cardinality | Sub_part | Packed | Null | > Index_type | Comment | Index_comment | > +-------------+------------+----------------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ > | order_order | 0 | PRIMARY | 1 | id > | A | 311492 | NULL | NULL | | BTREE | > | | > | order_order | 1 | order_order_8df3c379 | 1 | > order_number | A | 311492 | NULL | NULL | | BTREE > | | | > | order_order | 1 | order_order_fbfc09f1 | 1 | user_id > | A | 8 | NULL | NULL | YES | BTREE | > | | > | order_order | 1 | order_order_979d4f1e | 1 | > account_number | A | 311492 | NULL | NULL | | BTREE > | | | > | order_order | 1 | order_order_48fb58bb | 1 | status > | A | 10 | NULL | NULL | | BTREE | > | | > | order_order | 1 | order_order_482713d4 | 1 | user_id > | A | 12 | NULL | NULL | YES | BTREE | > | | > | order_order | 1 | order_order_482713d4 | 2 | > account_number | A | 155746 | NULL | NULL | | BTREE > | | | > | order_order | 1 | order_order_fb3214ea | 1 | status > | A | 215 | NULL | NULL | | BTREE | > | | > | order_order | 1 | order_order_fb3214ea | 2 | > account_number | A | 215 | NULL | NULL | | BTREE > | | | > | order_order | 1 | order_order_55eb7e10 | 1 | status > | A | 215 | NULL | NULL | | BTREE | > | | > | order_order | 1 | order_order_55eb7e10 | 2 | user_id > | A | 215 | NULL | NULL | YES | BTREE | > | | > +-------------+------------+----------------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
Ok, you're not giving much of a chance to the query planner either. The cardinality of status is 10, so status!=4 potentially means "give me 90% of the rows". The cardinality of user_id is a mere 12, which potentially means "give me 8% of the rows". Your query could easily return 30.000 rows, according to the above (since you're OR'ing user_id and account_number). All MySQL knows is that it might be returning ca. 8% of the rows. That's about the threshold where MySQL gives up and simply does a full table scan. Should the query really return ~30.000 rows in practice? If not, maybe you need to re-design the way you query your orders. Your status!=4 is no help at all, and user_id=12345 is killing the query. That said, a query time of 49 seconds is absurd for just 300.000 rows even for a full table scan, and you should look into why. Erik -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/ED42A47D-83B0-4C73-88C0-6F2D858F2214%40cederstrand.dk. For more options, visit https://groups.google.com/d/optout.

