情况 我正在一个记录用户配置文件视图的站点上,该数据以后只使用SELECT语句以各种自定义方式使用。
如果我的表格profile_views
包含字段view_id
,view_date
和profile_id
,我建议将view_id
作为INT(25)具有自动增量以允许大量ID。 profile_id
与表profile_id
中的profiles
对应,其中包含用户个人资料的常规字段。
基本的select语句是“SELECT v.view_id FROM profile_views
v WHERE v.profile_id ='125'”
我需要SELECT语句的速度,即使该表达到了数千行的数量。
我的问题是:
- >向profile_id
添加索引是否明智?这有助于加快'where'条款的速度吗?
- >如果我想在一个页面上获得许多配置文件的详细信息,我应该索引profile_id
并为表profiles
创建外键约束。profile_id
(使用mySQL 5. * INNODB)
感谢您的任何建议!不确定什么是最好的可扩展性(或者我可能接近这一切都错了)。
答案 0 :(得分:2)
您可以添加覆盖索引以获得最佳效果:
SELECT v.view_id
FROM profile_views v
WHERE v.profile_id='125';
e.g。对于上述查询,您可以添加覆盖索引KEY(profile_id, view_id)
看看here
答案 1 :(得分:1)
简答:是的,在您打算定期搜索的任何字段中添加索引可以提高选择效果。
但是请注意,添加到许多索引会影响SELECT性能,并且引擎必须弄清楚哪种索引组合最适合您的查询(这通常只会成为一个真正的问题带有大量索引)。
外键始终是保持数据库清洁的好方法,但会略微降低插入/更新性能。关于外键检查的优缺点有几个主题。
如果您打算定期显示配置文件的查看次数,对于大型应用程序,最好在配置文件表中使用计数器。在大型数据集上经常使用group by语句(例如count(*))可以轻松地将db带到其“膝盖”。
对于索引优化,EXPLAIN运算符是您最好的朋友。 http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm