Mysql 索引和主键

Mysql 索引和主键,mysql,indexing,primary-key,Mysql,Indexing,Primary Key,我的问题是关于索引和主键的 假设我们有一张这样的桌子: demo_table | id | int(11) | NO | PRI | | | subject | varchar(255) | YES | | NULL | | body | text | YES | | NULL | | to

我的问题是关于索引和主键的

假设我们有一张这样的桌子:

demo_table

| id                   | int(11)      | NO   | PRI |         |
| subject              | varchar(255) | YES  |     | NULL    |
| body                 | text         | YES  |     | NULL    |
| to                   | varchar(255) | YES  | MUL | NULL    |
| from                 | varchar(255) | YES  | MUL | NULL    |
| media                | varchar(255) | YES  |     | NULL    |
CREATE INDEX to_media on demo_table(media,to);
我有一个查询,用于查找特定“到”/“媒体”组合的最后一行:

select * from demo_table where to="" and media="" order by id desc limit 0,1;
我想为我的表创建一个索引。我应该这样创建索引吗:

demo_table

| id                   | int(11)      | NO   | PRI |         |
| subject              | varchar(255) | YES  |     | NULL    |
| body                 | text         | YES  |     | NULL    |
| to                   | varchar(255) | YES  | MUL | NULL    |
| from                 | varchar(255) | YES  | MUL | NULL    |
| media                | varchar(255) | YES  |     | NULL    |
CREATE INDEX to_media on demo_table(media,to);
或者像这样:

CREATE INDEX to_media on demo_table(id,media,to);

查看ID是否已排序?

它取决于以下要求:。。。
CREATE INDEX to_media on demo_table(id,media,to);
如果是大规模的,那么更多的Insert/update语句将用于Innodb,而其他方面则用于MYSAM

请参考链接以获得进一步澄清


您的问题是什么?您的问题是什么?是MyISAM还是InnoDB表?在InnoDB中,PK始终是索引中的第一列,即使您没有指定它。您应该警惕这么多允许空值的列。为VARCHAR(255)列编制索引不一定是个好主意(尽管这并不总是个坏主意)。您会得到查询优化器使用的由三部分组成的索引吗?我不相信你会的。您可能会使用由两部分组成的索引,但我不确定您使用的索引是否足以保证其存在。这样做的目的是避免使用表对结果进行排序,因此只使用带有id键的索引而不是索引+主键。它是innodb表。我的问题是要知道我在问题中提出的两类指数之间是否存在差异。仅供参考:在我的情况下,需要检查的行数超过100000行。这取决于要求,如。。。如果是大规模的,那么更多的Insert/update语句将用于Innodb,而其他方面则用于MYSAM