我有一个8.6M表,全文搜索,但仍然无法使用它。我可以将这个表分成两部分,但我认为必须有更好的方法来使用它。
我尝试使用临时算法创建一个视图,但它没有创建物理表。
表1 - 8.6M行
id name age
1 john 20
2 jean 25
查看1 - 200K行 - 仅限年龄= 25的记录。
id name age
2 jean 25
答案 0 :(得分:2)
在MySQL中,视图不是"物化视图。"每次查询视图时,都像查询基表一样。其他一些RDBMS产品具有物化视图,其中也存储了表的子集,但MySQL没有此功能。
您误解了视图的临时算法。这意味着它每次查询视图时都会创建一个临时表。这可能不会提高性能。
我不确定你为什么说不可能使用这张桌子。你的意思是查询不够快吗?这不是MySQL可以处理的最大表。有些表有数亿行,仍可使用。
您可能需要不同的索引来提供查询。您可能会受益于分区(尽管我不认为表分区与全文索引兼容)。您可能需要具有更多RAM或CPU马力的服务器硬件。
如果全文搜索很重要,您还可以考虑将可搜索数据复制到像Sphinx Search这样的全文搜索技术。请参阅我的演示文稿Full Text Search Throwdown。
答案 1 :(得分:1)
如果你想要一个视图,那么就像这里创建一个VIEW:http://dev.mysql.com/doc/refman/5.0/en/create-view.html
CREATE VIEW ....
如果您想要临时表,请创建一个临时表,如下所示:http://dev.mysql.com/doc/refman/5.1/en/create-table.html
CREATE TEMPORARY TABLE ...
视图是永久性的,但它是一个视图,而不是一个表。这意味着每次访问它时它只会在后台为您执行sql语句。它的目的和作用不仅仅是让你的查询看起来更漂亮,而且例如就像一个隐藏某些信息的过滤器。
视图将始终可访问。必须在DB连接周期内创建临时表才能使用。
希望这个答案可以帮助您确定您真正需要的内容 - What to use? View or temporary Table