Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该怎么做才能使mysql 100%最优?_Php_Mysql_Optimization - Fatal编程技术网

Php 我应该怎么做才能使mysql 100%最优?

Php 我应该怎么做才能使mysql 100%最优?,php,mysql,optimization,Php,Mysql,Optimization,最近我用php+mysql做了一个相当大的项目。现在我关心我的mysql。我应该怎么做才能使我的mysql尽可能地优化?告诉你所知道的一切,我会非常感激的 第二个问题,我在每个页面加载中使用一个mysql查询,它从mysql获取信息。这是一个相当大的查询,因为我从几个带有联接的表中获取信息。也许我应该做点别的 谢谢。学习使用解释工具。来自 特定查询性能: 使用EXPLAIN分析查询 执行计划 使用慢速查询日志(始终保留它) 开 当您有或 可以使用分组方式插入 演出 批量插入和替换 使用加载数据而

最近我用php+mysql做了一个相当大的项目。现在我关心我的mysql。我应该怎么做才能使我的mysql尽可能地优化?告诉你所知道的一切,我会非常感激的

第二个问题,我在每个页面加载中使用一个mysql查询,它从mysql获取信息。这是一个相当大的查询,因为我从几个带有联接的表中获取信息。也许我应该做点别的


谢谢。

学习使用解释工具。

来自

特定查询性能:

  • 使用EXPLAIN分析查询 执行计划
  • 使用慢速查询日志(始终保留它) 开
  • 当您有或 可以使用分组方式插入 演出
  • 批量插入和替换
  • 使用加载数据而不是插入
  • 限制m,n可能没有它快 听起来
  • 如果需要,请不要使用ORDER BY RAND() 有超过2K条记录
  • 使用SQL\u NO\u缓存时 选择频繁更新的数据或 大数据集
  • 在开始时避免使用通配符 询问
  • 避免相关子查询,并在 select和where子句(尝试 避免(在中)
  • 扩展性能提示:

  • 使用基准测试
  • 隔离工作负载—不要让管理工作干扰客户性能。(即备份)
  • 调试糟透了,测试石头
  • 随着数据的增长,索引可能会发生变化(基数和选择性会发生变化)。我们可能想要改变。使您的模式与代码一样模块化。使您的代码能够扩展。计划并接受变化,让开发人员也这样做 网络性能提示:

  • 通过只获取所需内容来最小化流量。 1.分页/分块数据检索以限制 2.不要使用选择* 3.如果长时间的查询效率更高,那么要小心大量小的快速查询
  • 如果适当,使用multi_查询以减少往返
  • 使用存储过程避免带宽浪费
  • 操作系统性能提示:

  • 使用适当的数据分区 1.对于集群。在需要集群之前就开始考虑它们
  • 保持数据库主机尽可能干净。你真的需要那个服务器上的窗口系统吗
  • 利用操作系统的优势
  • 缩减cron脚本
  • 创建一个测试环境
  • 三件事:

  • 联接不一定是次优的。通常,使用联接的模式比实现相同但避免表联接的模式要快。重要的是要知道连接是最优的<代码>解释非常有用,但您还需要知道索引是如何工作的

  • 如果你在每一页上都从数据库中获取数据,考虑一下缓存系统是否会为你工作。如果是这样,请检查并确认。它很容易在PHP中使用,而且速度非常快。它受欢迎是有原因的

  • 回到mysql:确保您的密钥缓冲区大小正确。您还可以考虑为应该保留在缓存中的关键索引使用专用密钥缓冲区。了解和了解。另见

  • “…因为我使用联接从几个表中获取信息”

    连接,即使是“大”连接也不坏。只要确保你有好的索引


    还要注意的是,有几条记录的性能与有几十万条记录的性能有很大不同,因此要进行相应的测试。

    关于性能,这本书很好:。这也很好。

    我的2个要点:将你的日志查询设置为完美是一个挑战,而不是你自己设定的第一个目标

    启用所有查询的mysql日志记录,并编写一些代码来解析日志文件并从SQL语句中删除任何文本值

    e、 g.变化

    SELECT * FROM atable WHERE something=5 AND other='splodgy';
    

    例如:

    SELECT * FROM atable WHERE something=:1 AND other=:2;
    
    (很抱歉,我手头没有这方面的代码,但这不是火箭科学)


    然后将重新写入的日志推到一个表中,这样您就可以根据执行的长度和频率对性能修复进行优先级排序。

    首先,你至少应该发布你要优化的查询。如果你想问两个问题,你应该在两篇单独的帖子中提问。告诉你知道的一切……否则……你不能期望用户给你写一篇自定义百科全书文章,包含你需要知道的一切。你需要确定具体的问题并给出相关的细节,比如一个缓慢的页面或查询。除非数据永远不变,否则你永远不会达到100%的最优!任何数据库都需要持续护理和喂养。你应该确定关键绩效指标,并解决这些指标,而不是撒网太广。。。。所有关于数据库规范化的内容规范化不一定是所有问题的解决方案;-);;去规范化也不是真的^^^(如果有一个神奇的解决方案总是有效的,我们会失业,不是吗?^^^)@Pascal是真的,但了解何时何地不使用它,将有助于他优化表结构以实现100%的最佳查询。@Gordon:我完全同意“何时何地不使用它”:-)那么,当我得到数百甚至数千张唱片时,我能做些什么呢?看看解释计划,开始调查其他选择,等等。我的观点是要谨慎。。。仅仅因为你的代码在(非常)轻的开发负载下表现良好,并不意味着它在现实世界中表现良好
    SELECT * FROM atable WHERE something=:1 AND other=:2;