0

任意の助けをいただければ幸いです。

私は2つのテーブルを持っています:

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `username_canonical` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `email_canonical` varchar(255) NOT NULL,
  `enabled` tinyint(1) NOT NULL,
  `salt` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `last_login` datetime DEFAULT NULL,
  `locked` tinyint(1) NOT NULL,
  `expired` tinyint(1) NOT NULL,
  `expires_at` datetime DEFAULT NULL,
  `confirmation_token` varchar(255) DEFAULT NULL,
  `password_requested_at` datetime DEFAULT NULL,
  `roles` longtext NOT NULL COMMENT '(DC2Type:array)',
  `credentials_expired` tinyint(1) NOT NULL,
  `credentials_expire_at` datetime DEFAULT NULL,
  `messages_unread_count` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_1483A5E992FC23A8` (`username_canonical`),
  UNIQUE KEY `UNIQ_1483A5E9A0D96FBF` (`email_canonical`)
  ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

CREATE TABLE `blog_posts` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `user_id` bigint(20) DEFAULT NULL,
 `category_id` int(11) DEFAULT NULL,
 `title` varchar(255) NOT NULL,
 `content` longtext NOT NULL,
 `tags` varchar(512) NOT NULL,
 `timestamp_created` datetime NOT NULL,
 `timestamp_updated` datetime NOT NULL,
 `is_visible` tinyint(1) NOT NULL,
 `is_deleted` tinyint(1) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `IDX_78B2F93212469DE2` (`category_id`),
 KEY `IDX_78B2F932A76ED395` (`user_id`),
 CONSTRAINT `FK_78B2F932A76ED395` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
 CONSTRAINT `FK_78B2F93212469DE2` FOREIGN KEY (`category_id`) REFERENCES `blog_categories`     (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

そして、投稿の作成者で出力を制限するすべての投稿を選択したいのですが、アドバイスをください-クエリでインデックスを使用するように強制するにはどうすればよいですか:

select p.*, u.* from blog_posts p join users u on p.user_id = u.id limit 0,10;

出力の説明:

+----+-------------+-------+------+----------------------+----------------------+---------+----------+------+-------------+
| id | select_type | table | type | possible_keys        | key                  | key_len | ref      | rows | Extra       |
+----+-------------+-------+------+----------------------+----------------------+---------+----------+------+-------------+
|  1 | SIMPLE      | u     | ALL  | PRIMARY              | NULL                 | NULL    | NULL     |    1 |             |
|  1 | SIMPLE      | p     | ref  | IDX_78B2F932A76ED395 | IDX_78B2F932A76ED395 | 9       | sky.u.id |    1 | Using where |
+----+-------------+-------+------+----------------------+----------------------+---------+----------+------+-------------+

ユーザーテーブルに参加するときにインデックスを使用する方法はありますか?

4

1 に答える 1

0

blogposts.userid と users.id の間に FK 関係を設定すると、Mysql は自動的にインデックスを使用します。

したがって、FK リレーションシップを作成します。

CONSTRAINT blogposts_userid FOREIGN KEY (user_id) REFERENCES users (id)
于 2012-07-12T20:38:15.457 に答える