MySQL - 如何永久存储缓存?

时间:2015-12-18 20:50:09

标签: php mysql performance query-optimization myisam

我有一个百万行表,其中包含大量特定查询,这些查询会降低所有内容的速度。每个查询都必须在用户每次点击时执行。

目前,我将密集查询的结果存储到$ _SESSION中。仅仅因为MySQL缓存在几次不同的查询后被删除了。

是否有可能以某种方式永久存储比$ _SESSION更好的重复查询?即使用户1进行了查询,以后用户2甚至在几天之后(?)执行相同的重复查询? / p>

这张桌子几乎没有新记录......就像..所以它基本上是99.99%阅读的表,而不是写作。

SHOW CREATE TABLE
CREATE TABLE `campaign__companies` (
`id` int(21) NOT NULL AUTO_INCREMENT,
`business_id` varchar(25) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT '',
`form_id` int(5) NOT NULL DEFAULT '-1',
`spec_ids` int(6) DEFAULT '0',
`spec_path` varchar(100) NOT NULL DEFAULT '0',
`country_id` int(5) NOT NULL,
`region_id` int(5) DEFAULT NULL,
`city_id` int(5) DEFAULT NULL,
`code_id` int(5) DEFAULT NULL,
`profile_url` varchar(255) NOT NULL DEFAULT '',
`has_email` varchar(100) DEFAULT NULL,
`email_price` float NOT NULL DEFAULT '0',
`has_phone` varchar(255) DEFAULT NULL,
`phone_price` float NOT NULL DEFAULT '0',
`is_active` int(2) NOT NULL DEFAULT '0',
`active` int(1) NOT NULL DEFAULT '1',
`failed_request` int(2) NOT NULL DEFAULT '0',
`failed_captcha` int(2) NOT NULL DEFAULT '0',
`date_added` int(21) NOT NULL DEFAULT '0',
`date_registered` int(21) NOT NULL DEFAULT '0',
`date_checked_pre` int(21) NOT NULL DEFAULT '0',
`date_checked_captcha` int(21) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 KEY `country_id` (`country_id`),
 KEY `has_email` (`has_email`),
 KEY `has_phone` (`has_phone`),
 KEY `spec_ids` (`spec_ids`),
 KEY `country_region` (`country_id`,`region_id`),
 KEY `country_region_city` (`country_id`,`region_id`,`city_id`),
 KEY `country_region_city_code`
 (`country_id`,`region_id`,`city_id`,`code_id`),
 KEY `spec_path` (`spec_path`)
 ) ENGINE=InnoDB AUTO_INCREMENT=950047 DEFAULT CHARSET=utf8

1 个答案:

答案 0 :(得分:0)

如果无法增加查询缓存的大小,您可能需要考虑类似memcache或类似选项(Redis!)的内容。这使您可以将值写入缓存服务器并非常快速地检索它们。当您使用PHP时,您会发现它有一个非常简单的API:只需将它指向一个memcache服务器(如果需要,它可以与您的MySQL服务器相同),然后读取和写入键/值。

注意:memcache也不是永久性的,但从长远来看肯定是好的。