PHP:我有一个简单的分页脚本,它使用两个查询。首先MySQL缓慢查询,快速查询子查询
MySQL:使用服务器版本4.1.25 - 我有两个表(产品,类别)与item_num字段绑在一起检索产品通过类别和都有唯一的ID字段索引和自动递增。它们都是MyISAM类型。
查询#1:SELECT COUNT(*) FROM rituals_collections, rituals_products WHERE rituals_collections.item_num = rituals_products.item_num AND rituals_collections.collection = '$currentCollection' $queryString ORDER BY rituals_products.id
这应该使用这些过滤器只抢了创纪录的数量,使得它并不需要获得数据以及导致更长的加载时间。 $ queryString仅查找URL中的任何类别或子类别,如果它们在那里,则将其添加到过滤进程中。 $ currentCollection是用户通过下拉菜单选择的内容。
查询#2:SELECT DISTINCT * FROM rituals_collections, rituals_products WHERE rituals_collections.item_num = rituals_products.item_num AND rituals_collections.collection = '$currentCollection' $queryString ORDER BY rituals_products.id LIMIT $offset, $rowsperpage
我觉得这是瓶颈在哪里发生的事情。我需要DISTINCT因为管理员不能消除他的重复。查询的其余部分与LIMIT$ offset的例外相同,$ rowsperpage这限制了产品的分页目的。
数据库截图
我有截图可用,但因为我是一个新用户,我不能张贴呢。我想可以提供给他们。
最后说明:我已经包括了整个脚本的位置:http://pastie.org/1239167两个表的设置位于因为第三方脚本我的客户端使用,是不可避免的事情是这样的。而且,这关系到MODx CMS,但应该非常简单。
如果有人能帮助,我会永远感激。谢谢!
我觉得你正在用查询查询每一列上的DISTINCT。你能隔离一个需要区分的列吗? – 2010-10-21 21:19:19
我删除了DISTINCT,但仍需要很长时间。加载3,000条记录需要20秒,而加载任何子类别的时间不到一秒。我是否应该在第一个查询中不使用mysql_num_rows,如果我只是想要计数?如果是这样,将有什么替代方案? – Monkeybones 2010-10-21 21:23:25