mysql> EXPLAIN SELECT * FROM urls ORDER BY RAND() LIMIT 1;
+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+
| 1 | SIMPLE | urls | ALL | NULL | NULL | NULL | NULL | 62228 | Using temporary; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+-------+---------------------------------+
उपर्युक्त कुशल के रूप में योग्य नहीं है, मुझे इसे ठीक से कैसे करना चाहिए?मैं MySQL में एक यादृच्छिक रिकॉर्ड कुशलतापूर्वक कैसे चुनूं?
अद्यतन
समाधान जवाब में बताया गया का उपयोग कर अभी भी मदद नहीं करता है लगता है:
mysql> explain SELECT *
-> FROM (
-> SELECT @cnt := COUNT(*) + 1,
-> @lim := 10
-> FROM urls
-> ) vars
-> STRAIGHT_JOIN
-> (
-> SELECT r.*,
-> @lim := @lim - 1
-> FROM urls r
-> WHERE (@cnt := @cnt - 1)
-> AND RAND(20090301) < @lim/@cnt
-> ) i;
+----+-------------+------------+--------+---------------+------+---------+------+-------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+------+---------+------+-------+------------------------------+
| 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | |
| 1 | PRIMARY | <derived3> | ALL | NULL | NULL | NULL | NULL | 10 | |
| 3 | DERIVED | r | ALL | NULL | NULL | NULL | NULL | 62228 | Using where |
| 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
+----+-------------+------------+--------+---------------+------+---------+------+-------+------------------------------+
लगता है कि यह मेरे मामले में काम नहीं कर रहा है। – user198729
@ user198729: ऊपर दिए गए कोड को देखते हुए आप 10 से 1 तक 'lim' को बदलना भूल गए हैं। शायद मैंने इसे स्पष्ट नहीं किया है। –
इससे कोई फर्क नहीं पड़ता, 10 से 1 को बदलने के बाद भी वही है। समझाओ आउटपुट की तीसरी पंक्ति पर ध्यान दें। – user198729