【发布时间】:2013-05-21 09:38:14
【问题描述】:
我正在创建一个广告系列跟踪网站。这是有 100 张桌子。我正在为每个月创建一个新表,用于使用CREATE TABLE IF NOT EXISTS 记录我的搜索和点击(该表由 23 个字段和 9 个索引组成。)。我的客户抱怨这个查询,他们告诉它占用了大量的 CPU。它在每个请求上运行。但是如果它不存在,我会创建这个表,即每月一次。这会增加CPU使用率吗?如果是,有什么办法可以减少这种情况下的 CPU 使用率?
编辑 1
CREATE TABLE IF NOT EXISTS click_log_201305 (
hit_id int(10) unsigned NOT NULL auto_increment,
link_id int(11) NOT NULL default '0',
word varchar(225) NOT NULL default '',
ppc_engine varchar(40) NOT NULL default 'internal',
ppc_commission varchar(10) default NULL,
gross_price decimal(5,3) NOT NULL default '0.000',
price decimal(5,3) NOT NULL default '0.000',
hit_date int(11) NOT NULL default '0',
hit_time int(11) NOT NULL default '0',
affiliate varchar(50) NOT NULL default '',
account varchar(50) NOT NULL default '',
commission varchar(10) default NULL,
paid_flag char(3) default NULL,
roi_code int(11) NOT NULL default '0',
roi_sale int(11) default NULL,
debug_info varchar(100) default NULL,
ip varchar(15) default NULL,
referer varchar(200) default NULL,
user_agent varchar(200) default NULL,
subid varchar(50) default NULL,
ad_id INT(11) default NULL,
group_id INT(11) default NULL,
country varchar(100) default NULL,
PRIMARY KEY (hit_id),
KEY jhcl_date(hit_date),
KEY jhcl_src(hit_date,ppc_engine),
KEY jhcl_id(hit_date,link_id),
KEY jhcl_acct(hit_date,account),
KEY jhcl_aff(hit_date,affiliate),
KEY jhcl_word(hit_date,word),
KEY jhcl_camp_id(link_id),
KEY jhcl_group_id(group_id),
KEY jhcl_ad_id(ad_id)
)
【问题讨论】:
-
“我正在为每个月创建一个新表来记录我的搜索和点击” - 这不是一个好的设计...高 CPU 通常表示大量表扫描,建议您创建适当的索引。跨度>
-
除非您提供您遇到的问题的具体细节,例如具有特定索引的特定查询等,否则无法回答这个问题 - 我们无法读懂您的想法。
-
是的,但是什么索引?架构?查询?
-
@mvp 当一个活动正在运行时,我正在记录其详细信息,我正在检查该月的表是否存在,如果不创建新表
-
一个带有适当索引的大表比每月一个新表要好得多(并且允许您从代码中完全摆脱
create table,因此可以更快地执行插入)...它的额外好处是允许查询跨越一个月(例如过去 3 个月,去年),如果你愿意,仍然可以按月为partitioned
标签: php mysql performance cpu-usage