MySQL高效查询大表统计信息

时间:2012-07-30 10:33:38

标签: mysql performance innodb

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

如果我的表格profile_views包含字段view_idview_dateprofile_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)

感谢您的任何建议!不确定什么是最好的可扩展性(或者我可能接近这一切都错了)。

2 个答案:

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