我在网上搜索了如何在PHP中进行搜索结果分页,我进入了这样的帖子:http://php.about.com/od/phpwithmysql/ss/php_pagination.htm
每当询问结果的不同页面时,将再次执行查询,并且更改的内容为“限制”。
但是,如果我的数据库非常大并且我希望每次都避免搜索它(使用类似select * from articles where HTML like '%dummy%' limit x, y
之类的内容)该怎么办?
据我所知,数据库每次都会自行搜索,并会根据x
和y
返回不同的结果。
答案 0 :(得分:1)
您只是无法通过一个查询(高效)执行此操作,您将始终需要一个选择结果,并且总共需要一个来获取项目数。
有一种方法可以改进它,你只需要第二个查询中的行数:
// Query one, to select the actual content:
Select * from articles where HTML like '%dummy%' LIMIT $start,$num_items
// Query two, select an index column, preferable a small int column:
Select id from articles where HTML like '%dummy%'
我一直在网上商店工作,不是最大的数据库,而是3500个产品,有1到N个图像,1到N个类和一些非常大的表(数量),并且完美运行:)
如果需要,您可以在1个查询中执行此操作。只需选择整个群并使PHP跳过行直到start
并在达到limit
时打破循环。但是,与再次运行查询相比,这需要更多的时间(和资源!)。如果您想提高速度,请确保将html
列编入索引,这样可以节省大量时间。
Rememer,这个(mysql-)数据库用于快速搜索,php不是
如果你有一个庞大的数据集,你可能想要一直改变战术。您可以计算行数并创建一个新表,您可以调用类似table_info
的内容并添加一行名为number_of_rows_in_TABLENAME
并使用新插入更新,并减去其中一行删除一行,但这种方法很快就会让你忘记一些事情