我需要在MySQL 5.5版本中创建一个表
此表将包含以下信息:
这就是我的想法:
create table statistics (
browser varchar(255) not null,
version float not null,
ip varchar(40) not null,
dateandtime datetime,
referrer varchar(255)
);
Run Code Online (Sandbox Code Playgroud)
我在mysql.com上看到我需要使用索引来快速查询我的问题但现在我的问题是我应该创建什么索引才能使该表快速查询?
我需要查询所有字段,例如:
谢谢
Gab*_*iel 12
我会推荐这个:
使用intergers而不是chars/varchars.这样你的索引更快(引用者除外).另外,我可以建议获取汇总表.虽然它没有真正规范化,但查询将立即执行 - 特别是如果你有一个拥有大量流量的大型组织.
所以这是表格:
create table statistics (
browser tinyint(3) UNSIGNED not null default 0,
version float(4,2) not null default 0,
ip INT(10) UNSIGNED not null default 0,
createdon datetime,
referrer varchar(5000),
key browserdate (browser, createdon),
key ipdate (ip, createdon),
// etc..
);
Run Code Online (Sandbox Code Playgroud)
浏览器0 =未知,1 = firefox等.这可以在您的代码中完成(因此您加载相同的代码进行插入和选择).我不在这里使用枚举因为如果你需要改变表并且你有数百万条记录,这可能会很痛苦.新浏览器=代码中的新数字,更快速地更改.
如果发生某种情况,此表可用于重新汇总所有其他表.所以你为内联汇总表创建索引(示例浏览器)
现在摘要表:
create table statistics_browser_2011_11 (
browser tinyint(3) UNSIGNED not null default 0,
version float(4,2) not null default 0,
number bigint(20) not null default 0,
createdon datetime,
unique key browserinfo (createdon, browser, version)
); // browsers stats for november 2011
Run Code Online (Sandbox Code Playgroud)
这种方式当你插入(你在访问网站时获得用户的日期并创建一个与表名匹配的$字符串)到这个表时你只需要使用on duplicate key number = number +1
.这种方式当您检索浏览器统计信息时速度非常快.
现在,您将需要创建一个合并表,因为如果您是本月的第二个,并且您想查询过去7天,则需要当前月份和上个月的表格.这里有更多信息:http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html
并重复其他信息的过程:ip,referrer等...
为了维护这些表,您必须创建一个为下个月创建表的cronjob.获取当前年/月的简单PHP脚本,然后创建下个月的表(如果它不存在,然后合并它们)
这可能是一些工作,但这就是我在工作中(使用类似的数据)与12 TB的数据和5,000名获取数据库的员工一起工作的方式.每个查询的平均加载时间约为每个请求0.60秒.