jQuery UI 自动完成:搜索 2 个巨大的 MySQL 表未链接
jQuery UI autocomplete: search 2 huge MySQL tables not linked
我的网站引用了 20,000 位不同作者的 100,000 多篇文章。我想 jQuery UI 在两个表中自动完成搜索,文章标题或作者姓名。
两个表基本是:
Table articles
- title (ex: This is the title)
- slug (ex: this-is-the-title)
Table author
- name (ex: John Doe)
- slug (ex: 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,即 2B 行必须由您的 WHERE
子句。由于此查询不需要表之间的任何类型的关系,因此最好只使用 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
我的网站引用了 20,000 位不同作者的 100,000 多篇文章。我想 jQuery UI 在两个表中自动完成搜索,文章标题或作者姓名。
两个表基本是:
Table articles
- title (ex: This is the title)
- slug (ex: this-is-the-title)
Table author
- name (ex: John Doe)
- slug (ex: 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,即 2B 行必须由您的 WHERE
子句。由于此查询不需要表之间的任何类型的关系,因此最好只使用 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