Hello,

add index to expression1_id and expression2_id on expression_expression.

it doesn't use index,following,

> WHERE
>         ee2.expression1_id = $ID
> OR
>         ee1.expression2_id = $ID

regards,


2012/7/3 brian <mysql-l...@logi.ca>

> I have a table that joins on itself through a second table:
>
> table expression:
>
> id INT PRIMARY KEY,
> lang_id INT
> term VARCHAR(128)
>
> table expression_expression:
>
> id INT PRIMARY KEY
> expression1_id INT
> expression2_id INT
>
> In order to find associated records, I had originally used a UNION, which
> worked very well. However, the application is written in PHP and uses PDO.
> PDOStatement::getColumnMeta() doesn't return anything for the table name
> with a UNION and this is crucial to the application. So I've come up with
> the following substitute:
>
> SELECT e.id, e.lang_id, e.term
> FROM expression AS e
> LEFT JOIN expression_expression AS ee1
>         ON ee1.expression1_id = e.id
> LEFT JOIN expression_expression AS ee2
>         ON ee2.expression2_id = e.id
> WHERE
>         ee2.expression1_id = $ID
> OR
>         ee1.expression2_id = $ID
>
> This gives me the correct values but is rather (~2-4 sec) slow. Here's the
> EXPLAIN output:
>
> *************************** 1. row ***************************
>            id: 1
>   select_type: SIMPLE
>         table: e
>          type: ALL
> possible_keys: NULL
>           key: NULL
>       key_len: NULL
>           ref: NULL
>          rows: 95127
>         Extra:
> *************************** 2. row ***************************
>            id: 1
>   select_type: SIMPLE
>         table: ee1
>          type: ref
> possible_keys: expression1_id_idx
>           key: expression1_id_idx
>       key_len: 8
>           ref: db_lexi.e.id
>          rows: 1
>         Extra:
> *************************** 3. row ***************************
>            id: 1
>   select_type: SIMPLE
>         table: ee2
>          type: ref
> possible_keys: expression2_id_idx
>           key: expression2_id_idx
>       key_len: 8
>           ref: db_lexi.e.id
>          rows: 1
>         Extra: Using where
> 3 rows in set (0.00 sec)
>
>
> Can someone suggest a better approach?
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql
>
>

Reply via email to