您要为每列(列1,列2,栏3)中有一个索引查找更多的信息而不是在如此大的桌子上进行桌面扫描。
问题是一个查询将使用一个索引。
如果您将一个索引放在(Column1,Column2,Column3)上,它仍然会为每个搜索执行一次表扫描,因为当为Column1使用索引时,它仍然需要检查Column2和Column3中的搜索关键字在同一时间,这些都没有下令。 - 索引仅针对Column1排序; Column2和Column2是随机顺序的
所以你有2个解决方案:要么改变表格布局,所以你没有Column1,Column2和Column3,但只有1列与搜索关键字:CNAME,如果你需要要知道它是否为Column1,2或3,然后添加一个带有1,2或3的整数的其他列。 在此cname列上放置一个索引,您的搜索将会很快。 但取决于你有其他列,这可能意味着你复制一些数据。
这就是我会做的。如果这还不够好,那么即使拆分表,所以只有一个表(id,cname),并使用该id可以从另一个表中查找其他需要的列。如果表格变得太长,您甚至可以拆分它,制作一个cnameAM,其中包含以A到M开头的单词和包含其余部分的cnameNZ。
如果无法更改表格布局: 而不是使用1个查询,使用多个查询
将索引放在每个列上并使用3个查询。 所以就(ID,列1)的指数,就(ID,列2)和(ID,栏3) 一个索引和:
SELECT * FROM 'SearchTable' WHERE Column1='$SearchKeyword'
SELECT * FROM 'SearchTable' WHERE Column2='$SearchKeyword'
SELECT * FROM 'SearchTable' WHERE Column3='$SearchKeyword'
这3个选择会非常快,因为他们每做一个查找他们的具体索引 ,然后加入3个结果集进行进一步处理或使用您检索的ID查找更多列
您可能也想看看http://stackoverflow.com/questions/9181566/full-text-搜索和蟒蛇/ 9182118 – 2012-02-13 15:26:32