我有一个拥有6000万条记录的数据库。目前的设置是有一张桌子,有三千万以上的桌子和一个小桌子,每个桌子有五百万(ish)。每个表的数据结构都是相同的。第一次创建我们的搜索的人(3-4年前我在这里)使用了多个小桌子。我们为每个连接使用match against
。我的老板和他的印象是,使用多个表让MySQL可以同时搜索每个表。在我读到的所有内容中,每个人都说一张大桌子会更好,但随着3000万张桌子变得更大,它有时会显着减速40+秒。这比它应该慢吗?MySQL全文表格结构
的选择statment
SELECT $stuff FROM table1 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table2 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table3 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table4 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table5 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table6 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table7 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table8 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table9 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table10 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE)
的表是MyISAM和存在于山坳Name
全文索引。 Table3
是有3000万条记录(约10GB)的记录。将它放在一张桌子上或分开它会使性能增加很多?我错过了别的东西?或者是6000万条记录大到全文搜索得到快速响应?
只需花费几分钟llars并在服务器中放置另一个RAM棒。如果整个活动数据集合在内存中,那么将其分区到磁盘上并不重要。 –
你是否同时运行你的查询?如果是这样,多个表_可能会更快,但这取决于您正在运行的硬件类型。 –