Php Mysql索引最佳实践

Php Mysql索引最佳实践,php,mysql,Php,Mysql,进展如何。我希望这不被认为是一个复制品。。。 我的问题有点不同,因为我不想引用其他数据库。 我只想知道最“高效”的方式来处理这个问题。。。 我希望有一个comments表,其中say page_id作为主键,但我仍然希望有一个与每一行关联的自动递增id,以便在更新或删除它们时可以通过id对它们进行寻址。到目前为止,我的表格结构如下 id INT(8) NOT NULL AUTO_INCREMENT, page_id INT(5) NOT NULL, comment VARCHAR(2500)

进展如何。我希望这不被认为是一个复制品。。。

我的问题有点不同,因为我不想引用其他数据库。 我只想知道最“高效”的方式来处理这个问题。。。 我希望有一个comments表,其中say page_id作为
主键,但我仍然希望有一个与每一行关联的自动递增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


提前感谢。

看起来您根本不需要添加任何修改,因为
Id
列本身有
主键
索引,您的查询
从注释中选择注释,其中page\u Id='$page\u Id'和Id>=$start\u at\u Id
使用WHERE子句中的
Id
列。因此,不需要更多的索引。您可以在
页面id
列中添加索引。但根据我的经验,这不会对你的问题产生任何影响。但是
page\u id
只有查询肯定会加快速度。

查询最常用的索引是

ALTER TABLE comments ADD UNIQUE INDEX myIndex USING BTREE (page_id, id)

这是因为
page\u id
是常数,这对优化非常有利。但是您有一个>=for
id
,所以不要使用默认的
散列
索引类型
BTREE
最适合于此,因为
HASH
(默认值)最适合用于相等/不相等比较(请参见)

它的拼写为MyISAM(即M,y,I,s,A,M),除了大写的“y”之外的所有字母-不确定使用屏幕阅读器时获得单词拼写有多容易。但是MyISAM不再是默认的存储引擎——默认的存储引擎是InnoDB;假设每页可以有多条注释,那么
page\u id
在注释表中不是唯一的?主键意味着唯一性约束,所以,撇开性能不谈,你的第二种方法是行不通的。。。你的意思是,如果我向page_id列添加一个索引,我的查询将加快速度,或者如果我从查询中删除AND子句,那么它们将加快速度?一开始我应该说得更清楚。由于您的洞察力,在初始页面上不再有AND子句,因为当我不需要AND子句时使用AND子句是愚蠢的,因为它>=0。我也忘了在上面所有的事情之后,我有一个限制51。我用这个额外的1来决定是否需要添加下一个链接,在那里我会说和>=那个id。这听起来也是个好主意。如果您有时间,可以举一个例子,说明如何在创建表时正确地实现这一点,而不必使用alter语句。再次感谢insight.CREATE表(…,使用BTREE(page_id,id)的唯一索引myIndex)