您希望对每一列(Column1、Column2、Column3)进行索引查找,而不是对如此大的表进行表扫描。
问题是一个查询将使用一个索引。
如果您在 (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 你可以从另一个表中查找你需要的其他列。如果表格变得太长,您甚至可以将其拆分,创建一个包含以 A 到 M 开头的单词的 cnameAM 和包含其余单词的 cnameNZ..
如果您无法更改表格布局:
而不是使用 1 个查询,而是使用多个查询
在每一列上放置一个索引并使用 3 个查询。
所以在 (id, Column1) 上建立索引,在 (id, Column2) 和 (id, Column3) 上建立索引
并做:
SELECT * FROM 'SearchTable' WHERE Column1='$SearchKeyword'
SELECT * FROM 'SearchTable' WHERE Column2='$SearchKeyword'
SELECT * FROM 'SearchTable' WHERE Column3='$SearchKeyword'
这 3 个选择会非常快,因为它们每个都会在其特定索引上进行查找
然后加入 3 个结果集以进行进一步处理或使用您检索到的 id 查找更多列