HI
我怀疑我看到在大表的情况下读取mysql数据的速度较慢...我已经做了很多优化但是无法通过..
我想的是,如果我将数据存储在一个文件中,它会提供更好的速度吗?
当然,每个数据都是一个单独的文件。所以数百万的数据=数百万的文件。我同意它会消耗磁盘空间......但是阅读过程怎么样?它更快?
我正在使用PHP来读取文件...
答案 0 :(得分:13)
读一个文件=快。
读取很多/大文件=慢。
从数据库中读取单个小条目=浪费I / O.
组合数据库中的许多条目=比文件访问更快。
答案 1 :(得分:7)
只要你的表被正确编入索引和,只要你使用那些索引(这是正确的),使用关系数据库(如mysql)将会更快,更强大,灵活(在这里插入许多流行语)等等。
要查看您的查询效果与预期不符的原因,您可以在您的选择(http://dev.mysql.com/doc/refman/5.1/en/explain.html)中使用explain
子句。
答案 2 :(得分:5)
回答这个话题,是的。
我的意思是有很多(未提及的)因素,不可能毫不含糊地说明每次都会比另一个更快。
答案 3 :(得分:4)
这取决于您要存储的数据类型。 结构化数据通常使用SQL读取速度更快,更灵活/更强大,因为这正是它所做的。如果要按特定属性进行搜索,筛选,排序或分组,则DBS的索引结构和优化是合适的。
但是,当使用数据库存储大型文件(BLOB)时,其中包含非结构化数据,因为您不打算对文件的任何部分进行搜索,筛选,排序或分组,然后这些文件只会炸毁数据库大小并使其变慢。微软就这一主题进行了一项有趣的研究(只需找到链接)。这项研究是微软在他们的SQLServer中引入外部BLOB存储的原因,这基本上就是你所问的:BLOB被保存在数据库之外的文件中,因为他们测量的访问速度要快得多
当存储文件(例如,图片,视频,文档......)时,您通常会在文件上有一些元数据,您希望能够使用结构化查询语言(如SQL),而实际文件不一定需要保存在数据库中。
答案 4 :(得分:2)
在大多数情况下从dbms(MySQL是一个)读取更快,因为它们内置了缓存,可以将数据保存在内存中,因此下次尝试读取相同的数据时,您不必等待令人难以置信的慢速硬盘。
dbms本质上是从您的硬盘驱动器+缓存中读取以加快速度(+一些数据排序算法)。请记住,您的数据库存储在硬盘上:)
答案 5 :(得分:0)
这取决于很多因素,尤其是您正在使用的文件系统类型。 MySQL无论如何都使用文件进行存储,因此读取速度不是问题 - 最重要的因素是MySQL可以找到数据的速度,与文件系统中查找速度的速度相比。
但是,一般来说,MySQL非常适合快速查找数据 - 毕竟,这就是它在生活中的目的。因此,除非你有一个非常好的理由为什么FS应该更快,坚持使用数据库并检查索引等。
答案 6 :(得分:0)
通过选择自定义文件存储系统,您将失去使用关系数据库的好处。此外,您的代码可能不易维护。
尽管如此,有许多人认为关系数据库以速度为代价提供了太多的复杂性。查看维基百科中的NoSQL条目,并阅读有关可能的替代方案。