我的网站引用了超过100.000篇不同作者的文章。我想在两个表中使用jQuery UI自动完成搜索,无论是文章标题还是作者名称。
这两个表基本上是:
表文章
- 标题(例如:这是标题)
- slu((例如:这是标题)
表作者
- 名字(例如:John Doe)
- slu((:john-doe)
应该检索slug信息,因为搜索栏将根据搜索结果重定向到article.php或author.php。
我担心的是解析这两个表需要很长时间,超过30秒:
SELECT title, ar.slug, name, au.slug
FROM articles ar,author au
WHERE published = 1
AND (title LIKE :term OR name LIKE :term)
该列已经编入索引。
有更好的方法吗?谢谢你的帮助。
您的查询速度太慢的原因是您的JOIN
没有条件,因此您获得的潜在结果集为100,000 * 20,000,即必须由WHERE
子句过滤的2B行。由于此查询的表之间不需要任何类型的关系,因此最好只使用UNION
,添加一个字段来区分author
和title
:
SELECT 'author' AS type, name AS value, slug
FROM author
WHERE published = 1 AND name LIKE :term
UNION
SELECT 'title' AS type, title, slug
FROM articles
WHERE published = 1 AND title LIKE :term