我想知道,因为PHP脚本将查询运行到数据库返回数据和PHP脚本开始获取它们的那一刻. 从理论上讲,我有一个带有巨大表格的潮汐数据库,谈论具有20多列的100/20亿记录,我有一个PHP脚本,该脚本要求将数据库中的所有行放置在数据库中,可以说,是一些文件. 我的知识是: PHP脚本运行使用SQL查询的PG_QUERY命令 通过Postgres php驱动程序/扩展查询传递到数据库 数据库进行工作并返回结果 PHP Postgres驱动程序将结果存储在服务器RAM内存中,并将资源ID返回到PHP脚本,这是参考结果 pg_fetch_row读取从RAM内存中读取记录 我正在尝试完成最佳的PHP代码的优化,该php代码正在描述上述工作. 问题是: 我的知识正确吗?如果缺少某件事或我对一步不对,请纠正我. 我怎么知道将多少RAM内存分配给数据库结果?如果我的服务器没有足够的内存,这可能很重要. 我知道我可以从单行中获取单行,然后将其存储到文件中,然后
以下是关于 optimization 的编程技术问答
我有以下查询,这花了我2秒钟才能执行,现在需要〜10分钟,因为我在表Custom_rement中添加了100个条目,彼此之间又有10个条目. DISTINCT它返回我 Showing rows 0 - 29 (96 total, Query took 0.00156 sec) 我拿出DISTINCT跟踪错误,然后返回了我 Showing rows 0 - 29 (94174080 total, Query took 0.1510 sec) 有什么方法可以优化? SELECT DISTINCT c.id, c.couponid, c.branchid, c.chainid FROM `users_roles` a, `field_data_field_ypefthinos` b, `custom_redemptions` c, `field_data_field_chain_manager` e, `field_da
我目前正在从命令行运行的PHP应用程序,以优化图像的文件夹. PHP应用程序更像是其他图像优化器的包装器,它简单地迭代目录并抓住所有图像,然后通过适当的程序运行图像以获得最佳结果. 以下是我将使用的程序,每个程序都将用于... imagemagick确定文件类型并将转换为非动画gif to png gifsicle要优化动画gif 图像 jpegtran优化 JPG 图像 pngcrush要优化 png 图像 pngquant要优化 png 图像png8格式 pngout要优化 png 图像png8格式 我的问题:有了1-10张图像,一切都会顺利且相当快,但是,一旦我在具有10张或更多图像的较大文件夹上运行,它就会变得非常慢.我并没有真正看到一个很好的解决方案,但是有助于避免重新处理图像的一件事.因此,如果我有一个带有100张图像的文件夹,并且我优化了该文件夹,然后添加5个新图像,请重新运行优化器.然后,它必须优化105张图像,我的目标是仅优化5个较新的
我们运行了以PHP编写的许多Web应用程序.不幸的是,其中有一些精选的查询,并有一些相当大的加入,这导致MySQL的响应速度降低. 因此,我们正在考虑缓存一些定期使用的连接.我研究了看起来很有希望的zend_cache,还有其他替代方案可以表现更好吗? 另外,缓存最好的后端是什么?我相信zend_cache提供基于文件,sqlite和memcach. 解决方案 当速度很重要时,您绝对应该去备忘录.但是在大多数情况下 zend_cache是一个非常好的缓存库,它支持通过其适配器系统进行众多缓存机制的事实使更改缓存解决方案变得轻而易举,所以我肯定会选择zend_cache. . 其他解决方案 要解决此问题,我将: 个人资料查询要检查错误的问题(缺少索引,MySQL未正确设置). 缓存输出(zend_cache,cache_lite,memecached等),如果数据库服务器的确超载. (1): 学会理解:解释.... 学会理解:显示状
我正在使用 smartOptimizer :缩小JS和CSS,使用CSS数据URI,添加遥远的标题和其他功能. ( http://farhadi.ir/works/smartoptimizer )知道是否存在具有类似或最佳工具的相似应用程序(例如Google Closure,CSScaffold,..) 如果您不确定女巫更好,您最喜欢什么? 感谢您的阅读,对不起,我的英语 解决方案 yslow(其他解决方案 Web Optimizer(其他解决方案 我的编辑器中有JS和CSS压缩机( coda.app ) ,然后我用 imageoptim.app 优化图像.您只需要拖放图像,并且该应用程序可以选择最好的压缩来完成他的工作. 注意:仅Mac
目前我正在开发一个内容管理系统,我想听听您的想法: 我有一张桌子,page.假设它看起来像这样 ID | Title | Content 1 | Test | This is a test 以及此外,我有一个page_option表(因此我可以存储与页面相关的选项,但我不想有一个有限的选项列表 - 如果需要.) page_option表看起来像这样: page_id | option_key | option_value 1 | background | red 1 | module1_key | chicken 现在要检索页面对象,我使用活动记录类进行以下操作(这是为此问题编码的伪记录): function get_by_id($page_id) { $this->db->where('id', $page_id); $page_object = $this->db->get('page'); if($pa
全部, 我想在注册过程中生成服务器端用户ID.该ID应该是顺序的,以允许群集索引.显然,它也需要是唯一的. 我可以在多大程度上使用uniqid("")?我不是在建造Google,并且我认为在同一微秒处注册的2个用户的风险接近NILL-但我没有实践经验可以为自己提供基础. SQL将拒绝重复ID的ID,我可以在PHP代码中有一个循环,如果发生碰撞/数据输入失败,这将继续发送新的注册条目,但是如果碰撞很少见,这只是一个很好的方法. 另外,我可以使用uniqid("",TRUE)添加一个随机的文章,但是如果2个用户在同一微秒内注册,则键不再是顺序的. 我难题最好的方法是什么?我要过度考虑这个吗? 谢谢, jdelage 解决方案 uniqid无非是 microtime (这就是为什么它生成顺序ID),因此,它可以预测可以预测,并且可以创建重复. 此ID应该是顺序的,以允许群集索引.显然,它也需要是独特的. [...]我要考虑这个吗? 包括M
我想知道是否将限制1添加到查询中是否会加快处理? 例如... 我有一个查询,大部分时间都会返回1结果,但偶尔会返回10,100甚至1000的记录.但是我只想要第一个记录. 极限1会加快速度或没有区别吗? 我知道我可以使用组返回1个结果,但这只会添加更多计算. 解决方案 是否有订单.无论如何,按需要整个结果设置的订单,因此可以订购. 如果您没有任何订单,则应更快地运行. 在所有情况下,它的运行速度都会更快一点,因为整个结果集当然不需要发送. 其他解决方案 是的!它将! ,但是请肯定的是,在SQL语句的末尾添加"限制1",所以为什么不进行镜头并查看 其他解决方案 这一切都取决于查询本身.如果您要进行索引查找(其中indexedColumn = someValue)或索引列上的排序(没有任何地方子句),则限制1确实会加快速度.如果您有加入或多个条款/订购条款,那么事情真的很快就会变得非常复杂.但是,使用" limit 1"将带走
我正在使用使用Zend tool生成的传统Zend Framework应用程序.我的应用程序中也有几个模块,也使用Zend tool生成.我打算在应用程序中的Zend框架中使用default routes. 例如:www.host.com/module/controller/action/param1/value1/param2/value2 这是我的问题: 性能明智,使用默认路线是最快的解决方案,对吗? 由于我永远不会改变路线,所以有办法 路由过程甚至更快?例如缓存?跳过路由 完全流程?或其他任何技术? 制作自定义路线的优点是什么? SEO更好吗? 我可以跳过AJAX调用的路由过程吗? (我知道答案 大多是否,但是也许我可以为Ajax呼叫进一步优化我的呼叫) 注意: 我了解路由过程本身及其工作方式 框架.但是,由于我不会使用大多数功能 可用,我认为也许是时候进行微调了:) 预先感谢. 解决方案 1.性能明智,使用默认路线是最快的解决
我需要一种为图像管理脚本生成缩略图(使用PHP5)的方法,并且在我的主机安装了多个版本的PHP(4和5)的问题上,PHP4设置为默认值.这意味着来自CLI的任何呼叫PHP都将运行PHP4.我想出了以下内容,这是我希望成为跨平台解决方案.我主要在这里发布它,因为我很难使用Google找到任何帮助,因此这可能在将来对某人有所帮助,我也有以下问题. 您是否看到有什么明显错误? 您知道或知道具有优化数组的PHP5二元的其他途径吗? 如果主机具有exec或shell_exec禁用,egalleryProcessqueue.php脚本是否可以作为独立的cron作业运行?我无法访问Cron来对此进行测试.我不太担心这个问题,因为无论如何我都会开始测试它. 有人对某种方式有任何建议,我可以得到有关处理图像多远的反馈?请参阅egalleryProcessqueue.php的托多部分,当它在管理员部分中时,我想显示一个进度栏. 主脚本 /** * Writes the array
检查是否在数据库中的正确数据的正确方法是什么? 我当前使用的是 mysql_query("SELECT anyfield FROM table WHERE field='$data'"); ,然后检查是否会影响任何行. ,但我对提取的数据anyfield没有任何用处. 尽管这里的资源使用量如此之少,但在不从表中提取任何其他字段的数据中是否存在数据的正确方法是什么? 解决方案 让数据库计数并从查询中检索计数数据. $result = mysql_query('SELECT COUNT(*) FROM `table` WHERE `field` = ...'); if (!$result) { die(mysql_error()); } if (mysql_result($result, 0, 0) > 0) { // some data matched } else { // no data matched } 其他解决方案
在我的应用程序中,我有一些记录,需要根据某些时间参数进行过滤.要进行日期比较,我需要将记录中的日期(格式YYYY-MM-DD的字符串)转换为UNIX时间戳(自1970年以来的秒).由于我有成千上万的记录,所以我真的想找到最有效的方法. 答案另一个问题建议在数据库中这样做(在这里没有一个选项,可悲的是,可悲),使用strtotime()或strptime(),但是这些不喜欢 喜欢最多的记忆和时间效率的方法,您知道吗? 鉴于我知道输入的确切格式,也许会使用某种形式的字符串操纵(substr或explode)与mktime更好? 如果您认为我的优化为时过早,那么幽默我好吗? 解决方案 为什么您认为strtotime()不是有效的功能?您是否完成了任何基准测试.请记住,strtotime()是一个内置库函数,将直接写在C中,而您出现的任何内容都将通过PHP解释器运行. 还请记住,日期计算本质上是棘手的,对诸如leap年和时区之类的问题. 至于替代方法,我认为
我有一个超过10,000,000行的数据库.现在查询它可能需要几秒钟才能找到一些基本信息.这不是可取的,我知道优化的最佳方法是最大程度地减少可能的行数,但是现在我没有时间做到这一点. 优化我不介意数据库的大小,这并不重要,因此任何增加尺寸的优化都可以.我的优化不是很好,现在我已经设置了索引,但是我不确定从那里得到的索引. 我最终会正确修剪数据库,但是是否有快速的临时解决方案? 解决方案 除了已经提出的索引外,您可能还需要研究划分,如果它们大. 在这里很难具体,因为我们的信息非常有限,但是适当的索引以及分区可以走很长的路要走.正确索引可能是一个漫长的主题,但是在非常一般的意义上,您需要索引您查询的列. 例如,假设您有一张员工表,并且您的SSN,fname,lname通常都有您的常规专栏.除了这些列外,我们还会说您在表中还有其他10列. 现在您有此查询: SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN =
在网站很忙,而不仅仅是让人们等待,超时或刷新;加重可能是服务器加载问题的问题. 我们太负载了,无法处理您的请求.请单击您的"返回" 浏览器并尝试再次做的事情. 在服务器超载之前,这是如何实现的?如果网站碰巧过载,同时还为网站提供了恢复的时间,那么这听起来像是一种真正整洁的方法来管理用户期望. . 解决方案 另一个选项是: $load = sys_getloadavg(); if ($load[0] > 80) { header('HTTP/1.1 503 Too busy, try again later'); die('Server too busy. Please try again later.'); } 我从PHP的网站 http://php.net/sys_getloadavg ,我不确定我不确定sys_getloadavg返回 的值表示什么值表示 其他解决方案 您可以简单地创建一个500.html文件,并在抛出50x错误时
这篇文章是对这个回答问题的后续措施:存储用户ID列表的最佳方法. 我采用了Cletus和Mehrdad Afshari使用标准化数据库方法的史诗建议.是否正确设置了以下表以进行适当的优化?我是MySQL效率的新手,因此我想确保这是有效的. 另外,当要找到游戏的平均评分时,我应该分别使用以下两个查询的总数? SELECT avg(vote) FROM votes WHERE uid = $uid AND gid = $gid; SELECT count(uid) FROM votes WHERE uid = $uid AND gid = $gid; CREATE TABLE IF NOT EXISTS `games` ( `id` int(8) NOT NULL auto_increment, `title` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=1 ; CREATE
如今,许多Web应用程序都使用他们与自己没有使用的API或代码,并且经常使用它效率低下.一些Google Maps Mashups想到了. 使用PHP/ASP后端,HTML,JavaScript(尤其是如今的所有Ajax) - 有很多潜在的瓶颈,问题,效率低下和双重增加. 您可以建议使用哪些策略调查,识别和解决慢速降低,冗余代码,泄漏和其他问题 - 服务器端和客户端上的Browsesr中的其他问题? 解决方案 一个非常开放的结尾和广泛的问题 - 划分每个区域可能会更有生产力,而不是查看更大的景象,这可能是压倒性的.对您提到的所有内容产生影响的一个非常重要的方面是正确审核,分析和调试您的代码,以下一些工具可以帮助您: [...]调查,识别和 解决慢速,冗余代码, Web应用中的泄漏和其他问题 - 两个服务器端[...] 用于PHP特定开发,请查看: php code sniffer php ast php sat php依赖 p
我创建了一个脚本,该脚本构建了一个菜单,其中包括类别,子类别和子类别类别. 要获取这些项目,我使用3个单独的MySQL查询.如下: 检索主要类别: SELECT id, name FROM categories WHERE parent_id=0 要检索我使用的每个类别的子类别: SELECT id, name FROM categories WHERE parent_id=? 在哪里?是父类别的ID. 然后,我再次为每个子类别运行查询. 如何优化此脚本以使用较少的SQL查询? 预先感谢您. 解决方案 尝试此查询 - 类别+子类别: SELECT c1.id, c1.name, c2.id, c2.name FROM categories c1 LEFT JOIN categories c2 ON c2.parent_id = c1.id WHERE c1.parent_id = 0 类别+子类别+子类别: SEL
我有一个网页,当用户访问它时,多个(10-20)AJAX请求立即对单个PHP脚本提出,该脚本取决于请求中的参数,将返回带有高度聚合数据的不同报告./p> 问题是,许多报告都需要大量的SQL调用才能获取必要的数据,在某些情况下,报告可能需要几秒钟才能加载. 结果,由于一个客户端正在向同一PHP脚本发送多个请求,因此您最终一次看到报告慢慢加载了第一页.换句话说,报告的生成不是并行完成,因此导致页面需要一段时间才能充分加载. 是否有任何方法可以在PHP中解决此问题,并使从单个客户端到单个PHP脚本的所有请求并行处理,以便可以更快地加载页面及其所有报告? 谢谢. 据我所知,PHP中可以做多线程. 看看 pthreads伸展. 您可以做的是使报告生成脚本的部分/函数要并行执行.这将确保每个函数都以自己的线程执行,并会更早检索您的结果.另外,设置最大数量并发线程 在这里一个基本的教程,可以让您开始使用Pthreads. 和几个更多示例可能会有所帮助(尤其是SQLWorke
我有一个PHP脚本,可以将图像大小调整到上传时的三个不同的分辨率.当我上传图像时,将其调整到300*300、80*80、800*800,并保存原始文件. 我使用的脚本是以下链接以下图像是服务器的系统监视器. CPU历史记录的前两个尖峰是在文件单独上传时发生的图像大小.以下是从队列上传的文件. 在此期间,服务器无法处理其他请求.当时我无法访问其他页面.页面将加载一半或根本不加载,或者在上传完成后,页面加载. 我需要立即解决此问题.如何克服这个问题.我必须为服务器准备.是否有用于调整图像大小的Apache的插件或代码有问题. 解决方案 即使调整图像大小在一分钟内占100%的CPU,仍然可以执行其他请求:您在多任务操作系统上使用了多个程序服务器(也可能有多个核心). 但是,当您启动PHP会话时,会话锁定:其他试图使用同一会话的请求必须等到第一个请求结束.. 这就是为什么在调整图像大小时无法同时请求的原因. 您必须在进行长时间处理之前关闭会话(此后最终重新