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