我计划对包含100个以上表的数据库执行搜索。我联合所有表格以加快搜索速度
SELECT `query`,url,keyword , body, title, pagerank, `precision`,Empire FROM jenniferaniston
WHERE title LIKE '%$q%' OR
body LIKE '%$q%' OR
keyword LIKE '%$q%' OR
`query`LIKE '%$q%' OR
url LIKE '%$q%'
UNION ALL
我对所有一百张表做了同样的方法。还有其他方法可以在MySQL中编写更短的代码吗? 因为我在Cpanel中面对错误,我认为它可能与SQL语句有关。
答案 0 :(得分:2)
以LIKE
通配符开头和结尾的%
表达式无法使用索引。您希望在100表数据库中的多个列中执行此操作。根本没办法让它快速:MySQL基本上需要读取整个数据库中的每一行。
有些事让我担心。如果UNION ALL
是一个选项,则意味着您的100个表共享相同的结构。此外,其中一个表称为jenniferaniston
。这表明您的数据库设计完全非规范化,每次从新actor添加数据时,您可能会创建一个新表,该表基本上是所有其他表的副本。修复之前为时已晚!您应该有一个名为actor
的主表,然后通过外键将其链接到包含该信息的其他表。
答案 1 :(得分:1)
您可以使用information_schema数据库获取表列表并使用该表进行查询。
或者,您可以转储整个数据库并搜索文件!
答案 2 :(得分:0)
您可以在information_schema数据库的帮助下找到。
select
subq.table_schema, subq.numberOfTables
from
(select
table_schema, count(table_name) as numberOfTables
from
tables
group by table_schema) as subq
where
subq.numberOfTables > 100