怎么回事。我希望这不被认为是......的副本 mysql two column primary key with auto-increment
虽然我没有尝试引用不同的数据库,但我的问题有点不同。
我想知道最“高效”的方式来解决这个问题......
我想要一个将page_id称为primary key
的注释表,但我仍然希望每行都有一个自动增量ID,因此我可以在更新或删除它时通过id来解决它们。截至目前,我的表格结构如下
id INT(8) NOT NULL AUTO_INCREMENT,
page_id INT(5) NOT NULL,
comment VARCHAR(2500) NOT NULL,
PRIMARY KEY (id)
我的查询看起来像......
SELECT comment FROM comments WHERE page_id = '$page_id' AND id >= $start_at_id
我一直在观看一堆MySQL优化视频,我一直听到左边的索引,但我的问题是我大部分都是盲目的,所以我看不到他们的代码示例。在这里我的屏幕阅读器将使所有这一切成为可能。 我的问题是这个。将表格设置为......更好吗?
page_id INT(5) NOT NULL,
id INT(8) NOT NULL AUTO_INCREMENT,
comment VARCHAR(2500) NOT NULL,
PRIMARY KEY (page_id)
如果是这样的话......构建查询的更好方法是什么。请记住,“start_at_id”为0,除非它是一个分页页面。我正在使用mysql 5.6的默认引擎,我相信是我的(原谅我的拼写)isam ???
提前致谢。
答案 0 :(得分:0)
看起来您根本不需要添加任何修改,因为Id
列本身有primary key
索引,而您的查询SELECT comment FROM comments WHERE page_id = '$page_id' AND id >= $start_at_id
使用Id
列中的page_id
列where子句。所以,不需要任何更多的索引。您可以在page_id
列中添加索引。但根据我的经验,这对你的查询没有任何影响。但{{1}} ONLY查询肯定会加速。
答案 1 :(得分:0)
您查询的最佳使用索引是
ALTER TABLE comments ADD UNIQUE INDEX myIndex USING BTREE (page_id, id)
这是因为page_id
是常量,对优化非常有用。但是你有一个> = id
所以不要使用默认HASH
索引类型。 BTREE
是最佳用途,因为HASH
(默认)最适合用于相等/不等比较(参见here)