Попытка уменьшить запрос mysql, почему 'касательно' ПУСТОГО УКАЗАТЕЛЯ?

Почему делает lean_users показать NULL в ref столбец? Это заставляет мой запрос использовать временную таблицу и filesort позже (когда я добавил больше соединений)...

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                                                        | 
+-------------+-----------------------------------------------------------------------------+
5
задан Glen Solsberry 20 May 2010 в 18:53
поделиться

1 ответ

Почему Lean_users показывает NULL в столбце ref?

Потому что эта таблица является ведущей в объединении, и вы не фильтруете какие-либо индексированные поля.

Это означает, что каждая запись должна быть прочитана и оценена.

8
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: