Hi!

On Fri, Jun 13, 2014 at 3:59 AM, yoku ts. <yoku0...@gmail.com> wrote:

> Hi,
>
> Would you try STRAIGHT_JOIN?
>
> mysql56> ALTER TABLE masik DROP KEY idx_test, ADD KEY idx_test(szam, id);
> Query OK, 0 rows affected (0.08 sec)
> Records: 0  Duplicates: 0  Warnings: 0
>
> mysql56> EXPLAIN SELECT e.id FROM masik m STRAIGHT_JOIN egyik e ON e.id=
> m.id WHERE e.duma= 'aaa' ORDER BY m.szam ASC;
> +----+-------------+-------+--------+---------------+----------+---------+---------+------+-------------+
> | id | select_type | table | type   | possible_keys | key      | key_len |
> ref     | rows | Extra       |
> +----+-------------+-------+--------+---------------+----------+---------+---------+------+-------------+
> |  1 | SIMPLE      | m     | index  | m_idx         | idx_test | 8       |
> NULL    |    2 | Using index |
> |  1 | SIMPLE      | e     | eq_ref | PRIMARY,e_idx | PRIMARY  | 4       |
> d2.m.id |    1 | Using where |
> +----+-------------+-------+--------+---------------+----------+---------+---------+------+-------------+
> 2 rows in set (0.00 sec)
>
> This may be faster than original situation if e.duma doesn't have a well
> cardinality or you can use LIMIT clause.
> This can eliminate a temporary table and file, but this needs whole index
> scan of m.idx_test.

Thank you, for your idea, i improved it a little:

ALTER TABLE egyik DROP KEY e_idx, ADD KEY e_idx(duma,id);

(root@localhost) [test]> EXPLAIN SELECT e.id FROM masik m
STRAIGHT_JOIN egyik e use index(e_idx)ON e.id= m.id WHERE e.duma=
'aaa' ORDER BY m.szam ASC;
+------+-------------+-------+-------+---------------+----------+---------+-----------------+------+--------------------------+
| id   | select_type | table | type  | possible_keys | key      |
key_len | ref             | rows | Extra                    |
+------+-------------+-------+-------+---------------+----------+---------+-----------------+------+--------------------------+
|    1 | SIMPLE      | m     | index | m_idx         | idx_test | 8
   | NULL            |    2 | Using index              |
|    1 | SIMPLE      | e     | ref   | e_idx         | e_idx    | 771
   | const,test.m.id |    1 | Using where; Using index |
+------+-------------+-------+-------+---------------+----------+---------+-----------------+------+--------------------------+
2 rows in set (0.00 sec)

In this case, both querys using indexes! Thanks for the suggestion!

Lay

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

Reply via email to