在Mysql中搜索包含100个以上表的数据库

时间:2016-06-15 12:13:12

标签: mysql sql

我计划对包含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语句有关。

3 个答案:

答案 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