1

我在一个记录用户配置文件视图的网站上工作的情况,该数据稍后仅使用 SELECT 语句以各种自定义方式使用。

如果我有一个profile_views包含字段view_idview_date和的表profile_id,我建议使用view_id具有自动增量的 as INT(25) 以允许大量 ID。profile_id对应于包含用户配置文件的一般字段的表profile_idprofiles

一个基本的选择语句是“SELECT v.view_id FROM profile_viewsv WHERE v.profile_id='125'”

即使表进入数千行,我也需要 SELECT 语句的速度。

我的问题是: -> 添加索引是否明智profile_id?这是否有助于加快“where”条款?-> 如果我想在一页上显示多个配置文件的详细信息,我应该索引profile_id并为表创建外键约束吗profilesprofile_id

(使用 mySQL 5.* INNODB)

感谢您的任何建议!不确定什么最适合可扩展性(或者我可能完全错了)。

4

2 回答 2

3

您可以添加覆盖指数以获得最佳性能:

SELECT v.view_id 
FROM profile_views v 
WHERE v.profile_id='125';

例如对于上述查询,您可以添加覆盖索引KEY(profile_id, view_id)

看看这里

于 2012-07-30T10:49:28.310 回答
1

简短回答:是的,向您打算定期搜索的任何字段添加索引将提高选择性能。

但要注意的是,添加到许多索引会影响 SELECT 性能,并且引擎必须确定哪种索引组合最适合您的查询(这通常只会在索引数量荒谬的情况下成为真正的问题)。

外键始终是保持数据库清洁的好方法,但会略微降低插入/更新性能。关于外键检查的优缺点已经有几个线程。

如果您打算定期显示配置文件的查看次数,对于大规模应用程序,最好使用配置文件表中的计数器。在大型数据集上频繁使用 group by 语句(例如 count(*))很容易使数据库崩溃。

对于索引优化,EXPLAIN 运算符是您最好的朋友。 http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm

于 2012-07-30T11:19:53.743 回答