开发者

need to speed up my database or query somehow

I hav开发者_运维百科e a left join statement on 2 tables: tbl1 has about 1 million records and tbl2 has about 20 million. The query takes about 9 seconds to execute. I have indexes on both but something doesn't seem right given how long queries take. Here is my select statement:

EXPLAIN SELECT * FROM (SELECT tbl1.id, tbl1.name, tbl2.addr FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl1.name LIKE 'G%' AND tble2.addr IS NOT NULL) as tempTable GROUP BY id LIMIT 10;

+----+-------------+------------+--------+------------------+--------------+---------+----------------| 
id|select_type| table     |type  |poss_keys|key |key_len|ref         | rows | Extra 
+----+-------------+------------+--------+------------------+--------------+---------+----------------
1 | PRIMARY   | <derived2>|system| NULL    |NULL| NULL  |NULL        |    0 | const row not found |
2 | DERIVED   | tbl1      |range |id,name  |name| 903   |NULL        |    1 | Using where         |
2 | DERIVED   | tbl2      |ref   |id,addr  |id  | 4     |tbl2.tbl1.id|   25 | Using where         |
+----+-------------+------------+--------+------------------+--------------+---------+----------------

UPDATE: If I take out the join statement & just select records from tbl1 or from tbl2 individually the select statements are fast (well under 1 second) but when I try to join them then it slows it down onsiderably...am I joining them correctly or do I need some kind of special index for joins?


You might simplify it a bit... I don't think you need a temp table or a group...

  SELECT tbl1.id, tbl1.name, tbl2.addr 
FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id 
WHERE tbl1.name LIKE 'G%' AND tble2.addr IS NOT NULL

Also...if the index doesn't seem to be working you could add "tble2.id like 'G%'"


You can try many other methods

Try using

mysql_unbuffered_query 

on php side that will make it faster i think as you have specified limit as 10 no more taking count will be needed

Then as result contains only 10 results

SQL_SMALL_RESULT

If you use the SQL_SMALL_RESULT option, MySQL uses an in-memory temporary table. so making small result query's faster

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜