【发布时间】:2012-01-25 09:20:37
【问题描述】:
我的问题是关于索引和主键的。
假设我们有一个这样的表:
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 |
我有一个查询要查找特定“to”/“media”对的最后一行:
select * from demo_table where to="" and media="" order by id desc limit 0,1;
我想为我的表创建一个索引。我应该这样创建索引:
CREATE INDEX to_media on demo_table(media,to);
或者像这样:
CREATE INDEX to_media on demo_table(id,media,to);
看到ID排序了吗?
【问题讨论】:
-
你的问题是什么,你的问题是什么?
-
是 MyISAM 还是 InnoDB 表?在 InnoDB 中,PK 始终是索引中的第一列,即使您没有指定它。
-
您应该警惕这么多允许空值的列。索引 VARCHAR(255) 列不一定是一个好主意(尽管它并不总是一个坏主意)。你会得到查询优化器使用的 3 部分索引吗?我不相信你会。您可能会使用 2 部分索引,但我不确定您是否会使用足够的索引来保证它的存在。
-
思路是避免使用表对结果进行排序,所以只会使用带id键的索引,而不是索引+主键。
标签: mysql indexing primary-key