2010-05-20 12 views
5

Dlaczego lean_users pokazuje NULL w kolumnie ref? To powoduje, że moje zapytanie użyć tabeli tymczasowej i filesort później (gdy Dodałem więcej łączy) ... stółPróba zredukowania zapytania mysql, dlaczego "ref" NULL?

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 |    | 
+----+-------------+-------+--------+---------------+---------+---------+----------------+------+-------------+ 

użytkowników

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 stół

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              | 
+-------------+-----------------------------------------------------------------------------+ 

Odpowiedz

8

Dlaczego lean_users pokazuje wartość NULL w kolumnie ref?

Ponieważ ta tabela prowadzi w złączeniu i nie filtrujesz żadnych indeksowanych pól.

Oznacza to, że każdy rekord powinien zostać odczytany i oceniony.

+0

Czy istnieje sposób, aby go poprawić? – ryy

+0

@ryy: co poprawić? – Quassnoi

+0

Czy mógł zrobić coś inaczej, więc MySQL nie musiałby czytać wszystkich indeksów od lean_users? – ryy

Powiązane problemy