Mysql索引最佳实践

时间:2014-10-12 16:53:16

标签: php mysql

怎么回事。我希望这不被认为是......的副本 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 ???

提前致谢。

2 个答案:

答案 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