首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化php页面中的大数据

优化php页面中的大数据
EN

Stack Overflow用户
提问于 2012-10-21 02:06:14
回答 2查看 2.1K关注 0票数 1

我试图加快查询200 K行数据并在网页中显示的时间,通常大约需要20-30秒,但目前我已将其降至7-10秒左右。我最多还是需要3-7秒左右的时间。

在我的查询中,我选择单个表中的所有行,并在PHP脚本中放置大约5列。查询如下:

代码语言:javascript
复制
SELECT * FROM table where company = ? and division = ?;

我只是添加了我的会话的参数。然后,我在.inc文件中发送查询和参数,inc运行查询。但是它还运行一个单独的数据分页查询。然后对这两个查询进行比较,以检查两者之间是否有任何不正常之处。然后,它将把数据放在一个新窗口中。

我是否可以使用任何已知的算法或技术来加速这一过程?我已经删除了任何垃圾代码,并加快了一些函数,但它仍然很慢。

P.S.:我大约两天前也处理过这个系统,所以我还在熟悉这个系统的结构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-21 02:08:56

首先,确保该表上有索引。如果查询在where子句中同时包含了companydivision,那么跨字段的复合索引就会工作得很好。

第二,不要运行第二个分页查询!使用limit子句运行第一个查询,缓存所需的内容,然后在其中分页。

票数 1
EN

Stack Overflow用户

发布于 2012-10-21 02:39:54

  1. 使用到数据库的持久连接以避免连接开销。
  2. 检查所有表在基数较高的列上都有主键(许多行与键值匹配)。那么,gender列的基数(选择性)很低,唯一的用户id列具有较高的基数,是成为主键的好选择。
  3. 不同表之间的所有引用通常都应该使用索引(这也意味着它们必须具有相同的数据类型,以便基于相应列的联接速度更快)。还要检查您经常需要搜索的字段(经常出现在WHERE、ORDER或GROUP子句中)有索引,但不要添加太多:最糟糕的是在表的每一列上添加一个索引(我还没有看到一个表的索引超过5个,甚至是20-30列)。如果您在比较中从未引用过列,则没有必要对其进行索引。
  4. 在发出GRANT语句时使用更简单的权限可以使MySQL减少客户端执行语句时的权限检查开销。
  5. 每行使用较少的RAM,方法是声明列的大小,以保存存储在其中的值。
  6. 使用最左边的索引前缀-在MySQL中,您可以在几个列上定义索引,以便该索引的左边部分可以单独使用,这样就可以减少索引的需求。
  7. 当索引由多个列组成时,为什么不创建一个短的、合理的惟一的、索引的散列呢?然后您的查询将如下所示:从hash_column = MD5( CONCAT(col1,col2) )和col1='aaa‘和col2=’bbb‘的表中选择*;
  8. 考虑在表加载数据后在表上运行分析表(或myisamchk --从命令行进行分析),以帮助MySQL更好地优化查询。
  9. 在可能时使用CHAR类型(而不是VARCHAR、BLOB或TEXT) --当列的值具有常长时:MD5-散列(32个符号)、民航组织或IATA机场代码(4和3个符号)、BIC银行代码(3个符号)等。可以更快地找到CHAR列中的数据,而不是在可变长度数据类型列中。
  10. 如果你有太多的列,不要分割一个表。在访问一行时,最大的性能问题是查找行的第一个字节所需的磁盘查找。

欲了解更多信息,请访问:

http://www.ajaxline.com/32-tips-to-speed-up-your-mysql-queries

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12994326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档