当前位置:  开发笔记 > 编程语言 > 正文

如何提高MySQL数据库的性能

如何解决《如何提高MySQL数据库的性能》经验,为你挑选了3个好方法。

如何提高mysql数据库的性能,因为我的网站托管在共享服务器上,他们已暂停我的帐户,因为"查询太多"的东西问"索引"或"缓存"或修剪我的数据库我不知道是什么做"索引"和缓存均值以及如何在php上做这件事谢谢



1> Hugh Bothwel..:

索引是什么:

将数据库表视为库 - 您拥有大量书籍(记录),每个书籍都包含相关数据(作者姓名,出版商,出版日期,ISBN,内容).还假设这是一个非常天真的图书馆,所有书籍都按ISBN(主键)顺序搁置.正如书籍只能有一个物理排序一样,数据库表只能有一个主键索引.

现在想象有人来到图书管理员(数据库程序)并说,"我想知道图书馆里有多少Nora Roberts书籍".要回答这个问题,图书馆员必​​须走过走道,看看图书馆里的每本书,这本书很慢.如果图书管理员收到这样的许多请求,那么按照作者姓名(姓名索引)设置卡片目录是值得的 - 然后他可以通过参考目录而不是走货架来更快地回答这些问题.从本质上讲,索引建立了书籍的"替代排序" - 它将它们视为按作者的字母顺序排序.

请注意1)设置目录需要时间,2)目录占用了库中的额外空间,3)它使向图书馆添加书籍的过程变得复杂 - 而不仅仅是将书籍放在书架上此外,图书管理员还必须填写索引卡并将其添加到目录中.以同样的方式,在数据库字段上添加索引可以加快查询速度,但索引本身会占用存储空间并减慢插入速度.因此,您应该只根据需要创建索引 - 索引很少搜索的字段没有意义.

缓存是什么:

如果图书管理员有很多人进来并一遍又一遍地问同样的问题,那么在前台写下答案可能是值得的.他可以简单地说,"这是我给最后一个问这个问题的人的答案",而不是检查堆栈或目录.

在您的脚本中,这可能以不同的方式应用.您可以存储数据库查询或计算的结果或呈现的网页的一部分; 您可以将它存储到辅助数据库表或文件或会话变量或memcached等内存服务.您可以存储预先解析的数据库查询,随时可以运行.像Smarty这样的库会自动为您存储部分或全部页面.通过存储结果并重复使用,您可以避免多次执行相同的工作.

在每种情况下,您都必须担心答案保持有效的时间.如果图书馆有新书怎么办?使用可能过时五分钟的答案是否可以?过时的一天怎么样?

缓存是特定于应用程序的; 您将不得不考虑数据的含义,更改的频率,计算的成本,结果的频率.如果数据变化缓慢,最好每次更改时重新计算并存储结果; 如果它经常变化但并不重要,仅当缓存值超过特定年龄时更新可能就足够了.



2> Zoredache..:

在本地设置应用程序的副本,启用mysql查询日志,并设置xdebug或其他一些分析器.开始收集数据并测试您的应用程序.有很多关于如何优化事物的指南和书籍.您必须花时间测试并首先收集数据,以便优化正确的事情.

使用您收集的数据尝试并减少每页查看的查询数量.理想情况下,您应该能够在少于5-10个查询中获得所需的一切.

查看日志,看看你是否要求两次同样的事情.在代码的一部分中请求记录是一个坏主意,然后在几行之后再次从数据库中再次请求它,除非您确定该值可能已更改.

查找嵌入在循环中的查询,并尝试重构它们,以便您进行单个查询并简单地循环结果.

你提到的选择*表明你可能做错了什么.您可能应该列出您明确需要的字段.检查这个网站或谷歌有很多关于为什么选择*是邪恶的好论据.

开始查看您的查询,然后使用解释.对于经常使用的查询,请确保它们使用良好的索引而不执行全表扫描.调整开发数据库和测试的索引.



3> Berek Bryan..:

您可以查看以下几项内容:

    查询设计 - 研究更先进,更快速的解决方案

    硬件 - 在问题上抛出越来越好的硬件

    数据库设计 - 使用索引并实践良好的数据库设计

所有这些说起来容易做起来难,但这是一个开始.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有