php - 如何提高 MySQL 数据库的性能

标签 php mysql database performance caching

如何提高 mysql 数据库的性能,因为我的网站托管在共享服务器上,他们因为“查询太多”而暂停了我的帐户 这些东西问“索引”或“缓存”或修剪我的数据库 我不知道“索引”和缓存是什么意思以及如何在 php 上执行 谢谢

最佳答案

什么是索引:

将数据库表想象成一个图书馆 - 您有大量书籍(记录),每本都有相关数据(作者姓名、出版商、出版日期、ISBN、内容)。还假设这是一个非常天真的图书馆,所有的书都按 ISBN(主键)顺序上架。正如书籍只能有一个物理顺序一样,一张数据库表也只能有一个主键索引。

现在假设有人来到图书馆员(数据库程序)面前说,“我想知道图书馆里有多少本 Nora Roberts 的书”。要回答这个问题,图书管理员必须在过道上走来走去,翻阅图书馆里的每一本书,这是非常缓慢的。如果图书馆员收到很多这样的请求,那么值得他花时间按作者姓名(姓名索引)设置卡片目录 - 然后他可以通过引用目录而不是在书架上走来走去更快地回答这些问题。从本质上讲,该索引设置了书籍的“替代排序” - 它将它们视为按照作者的字母顺序排序。

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

什么是缓存:

如果图书馆员有很多人进来并一遍又一遍地问同样的问题,那么他花时间在前台写下答案可能是值得的。他可以简单地说,“这是我给最后一个问那个问题的人的答案”,而不是检查书库或目录。

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

在任何情况下,您都必须担心答案会保持多长时间。如果图书馆买了一本新书怎么办?使用可能已过时五分钟的答案是否可以?过时一天怎么办?

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

关于php - 如何提高 MySQL 数据库的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/451839/

相关文章:

c - 操作一个非常大的 SHA256 哈希文本数据库的最有效方法?

php - 无法接收 php 文件中的 POST 数据

php - 使用 jQuery 提交和显示数据 - 问题

PHP:如何从 JSON(从 Swift iOS 应用程序发送)获取变量并用 JSON 响应

php - 客户端验证不起作用

mysql - 选择定位效果不佳

mysql - PG::Error : 结果已被清除 Rails 序列化

MySQL 从起始值开始排序

python - 插入后如何更新 Mongo 文档?

java - 使用 Oracle UCP 连接池管理器时如何获取连接?