【发布时间】:2010-09-13 20:34:49
【问题描述】:
我有一个“项目”表和一个“项目关键字”表。 当用户搜索关键字时,我想给他一页结果加上结果总数。
我目前正在做的是(对于搜索“a b c”的用户:
SELECT DISTINCT {fields I want} FROM itemkeywords JOIN items
WHERE (keyword = 'a' or keyword='b' or keyword='c'
ORDER BY "my magic criteria"
LIMIT 20.10
然后我用计数执行相同的查询
SELECT COUNT(*) FROM itemkeywords JOIN items
WHERE (keyword = 'a' or keyword='b' or keyword='c'
这可能会得到一个相当大的表,我认为这个解决方案非常糟糕......
但我想不出比这更好的了。
避免两次访问 MySQL 的明显替代方法,即只执行第一个查询,不使用 LIMIT 子句,然后导航到正确的记录以显示相应的页面,然后导航到记录集的末尾以便计数结果似乎更糟……
有什么想法吗?
注意:我使用的是 ASP.Net 和 MySQL,而不是 PHP
【问题讨论】:
-
在过去的应用程序中,我使用了这两种技术(两个查询和一个没有限制子句的查询),具体取决于我期望的结果数量。我有一个想法(尽管我从未尝试过)正在连接一个几乎相同的子查询以获取计数。那将是 1 个 DB 命中,但仍然有 IO。
标签: asp.net mysql performance search