我有正在一个非常非常长的时间来执行(如15秒),这是只在一个小测试数据集的查询。改进具体MySQL查询要少CPU /磁盘密集型
我在寻找帮助改善这一点:
describe SELECT * from people where uid in (SELECT uid2 from friends where uid1=PHP_UID_VARIABLE) order by rand() limit 1;
+----+--------------------+---------+------+---------------+------+---------+-------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+---------+------+---------------+------+---------+-------+-------+----------------------------------------------+
| 1 | PRIMARY | people | ALL | NULL | NULL | NULL | NULL | 6726 | Using where; Using temporary; Using filesort |
| 2 | DEPENDENT SUBQUERY | friends | ref | uid1,uid2 | uid1 | 8 | const | 15501 | Using where |
+----+--------------------+---------+------+---------------+------+---------+-------+-------+----------------------------------------------+
我知道它是“坏” - 它同时使用了加入和兰德公司的订单(),它永远不会成为特别有效。我不确定为什么它没有在“人员”表上使用索引 - “uid”是主键并被索引。
查询的目的应该是足够明显,但对于后人,我在做什么是选择从人民表所在的UID的“好友”列表匹配另一个表1个随机行。
非常好,效果很好。现在要弄清楚它是如何工作的更好,所以我写的比我原来的更有效的查询:) – 2011-02-04 22:11:05