使用Mysql和windows将常见查询存储在磁盘上

时间:2013-08-30 15:28:17

标签: mysql performance caching memcached query-tuning

我有一个庞大的人员数据库,并使用名称进行常见搜索。

SELECT * FROM tbl_person WHERE full_name LIKE 'Sparow%Jack%';
SELECT * FROM tbl_person WHERE full_name LIKE 'Sparow%';

我很少在此表中插入新数据。

我想在hark磁盘上存储常见的last_name查询,已经存储在ram中的查询,但每次服务器重新启动时都会将其全部丢失。

我的表中有1.7亿个行,每行(带索引)占用1k,是的,它是一个1.7Tb的数据库。

这是我想在磁盘上存储公共选择的主要原因。

Variable_name,Value
query_alloc_block_size,8192
query_cache_limit,1048576
query_cache_min_res_unit,1024
query_cache_size,4294966272
query_cache_type,ON
query_cache_wlock_invalidate,OFF
query_prealloc_size,8192

编辑:

SELECT * FROM tbl_person WHERE full_name LIKE 'Savard%';

第一次执行需要1000秒,之后需要2秒。 如果我重新启动系统并再次执行,查询将再次花费1000秒。

我只是想避免mysql再花1000秒运行我在重启之前已经做过的同样的查询。

2 个答案:

答案 0 :(得分:0)

为什么不考虑使用Redis进行缓存?

它是一个内存数据存储,现在非常受欢迎。使用Redis的网站: http://blog.togo.io/redisphere/redis-roundup-what-companies-use-redis

Redis还可以将数据保存到磁盘:http://redis.io/topics/persistence

但是,对于缓存,保存到磁盘不应该是绝对关键的。这个想法是,如果没有缓存某些数据,最坏的情况并不总是手动从磁盘加载,而是直接进入数据库。

答案 1 :(得分:0)

如果您对数据执行了很多此类查询,建议您使用Apache LuceneSphinx为您的表编制索引。数据库速度很快,但在数百万行上执行部分匹配时效率不高(尤其是MySQL)。

我已经回答了关于Zend Framework和Lucene的similar question,并且赞成Zend的解决方案,因为我相信它是最容易设置和使用PHP环境的。

幸运的是,Zend Framework可以被模块使用,你可以轻松地只使用Zend Search Lucene模块而不需要整个类库。

**编辑**

索引器的作用不是替换您的数据库,而是通过提供执行部分搜索的方法来改进它的搜索功能。例如,给定您的表,您可能只索引几个字段(使它们“可查询”)并使用其他静态(非索引)字段来引用数据库中的行。

使用索引器的优点是您还可以索引预先计算并直接搜索它们,而不是查询数据库。