2010-05-20 12 views
5

lean_users कॉलम में NULL क्यों दिखाता है? यह एक अस्थायी मेज और एक filesort बाद में (जब मैं अधिक मिलती है जोड़ दिया है) का उपयोग करने के लिए अपने प्रश्न का कारण बनता है ...mysql क्वेरी को कम करने की कोशिश कर रहा है, 'ref' क्यों नल है?

14:45:21 (60) > EXPLAIN select * from users u inner join lean_users lu on u.id = lu.user_id; 
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ 
| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra  | 
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ 
| 1 | SIMPLE  | lu | index | PRIMARY  | PRIMARY | 4  | NULL   | 358 | Using index | 
| 1 | SIMPLE  | u  | eq_ref | PRIMARY  | PRIMARY | 4  | nwa.lu.user_id | 1 |    | 
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ 

उपयोगकर्ताओं तालिका

14:45:24 (61) > show create table users; 
+-------+-----------------------------------------------------------------------------+ 
| Table | Create Table                | 
+-------+-----------------------------------------------------------------------------+ 
| users | CREATE TABLE `users` (
    `id` int(11) NOT NULL auto_increment, 
    `email` varchar(255) default NULL, 
    `first_name` varchar(50) NOT NULL, 
    `last_name` varchar(50) NOT NULL, 
    `address1` varchar(255) NOT NULL, 
    `address2` varchar(255) default NULL, 
    `city` varchar(25) NOT NULL, 
    `state` mediumint(9) default NULL, 
    `zip` varchar(10) NOT NULL, 
    `phone` varchar(20) default NULL, 
    `country` smallint(6) NOT NULL, 
    `username` varchar(10) NOT NULL, 
    `password` varchar(50) default NULL, 
    `cdate` datetime NOT NULL, 
    `last_used` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 
    `level` varchar(25) default 'user', 
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB AUTO_INCREMENT=38076 DEFAULT CHARSET=utf8 | 
+-------+-----------------------------------------------------------------------------+ 

lean_users तालिका

14:45:40 (62) > show create table lean_users; 
+-------------+-----------------------------------------------------------------------------+ 
| Table  | Create Table                | 
+-------------+-----------------------------------------------------------------------------+ 
| lean_users | CREATE TABLE `lean_users` (
    `user_id` int(11) NOT NULL, 
    PRIMARY KEY (`user_id`), 
    CONSTRAINT `lean_users_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8              | 
+-------------+-----------------------------------------------------------------------------+ 

उत्तर

8

रेफ कॉलम में दुबला_यूसर न्यूल क्यों दिखाता है?

क्योंकि यह तालिका शामिल होने में अग्रणी है और आप किसी अनुक्रमित फ़ील्ड पर फ़िल्टर नहीं करते हैं।

इसका मतलब है कि प्रत्येक रिकॉर्ड को पढ़ और मूल्यांकन किया जाना चाहिए।

+0

क्या इसे सुधारने का कोई तरीका है? – ryy

+0

@ryy: क्या सुधारें? – Quassnoi

+0

क्या वह कुछ अलग कर सकता था इसलिए MySQL को lean_users से सभी अनुक्रमणिका को पढ़ने की आवश्यकता नहीं होगी? – ryy

संबंधित मुद्दे