[英]How can I replace/speed up a text search query which uses LIKE?
我正在尝试加快查询速度...
select PadID from Pads WHERE (keywords like '%$search%' or
ProgramName like '%$search%' or English45 like '%$search%') AND
RemovemeDate = '2001-01-01 00:00:00' ORDER BY VersionAddDate DESC
我已经做了一些工作,有一个关键字表,所以我可以添加
... PadID IN (SELECT PadID FROM Keywords WHERE word = '$search') ...
但是,将来自English45和ProgramName的单词拆分成单词表将是一场噩梦。
有任何想法吗 ? 编辑:(还提供了实际的表名)
朱尔斯,
您需要提供查询的解释输出。 就像是:
mysql> EXPLAIN select id from mytable WHERE (keywords like '%$search%' or ProgramName like '%$search%' or English45 like '%$search%') AND RemovemeDate = '2001-01-01 00:00:00' ORDER BY VersionAddDate DESC
并且如果可能的话,可以通过在表上执行DESC来构造表。 这将有助于我们识别您的索引结构以及它们是否在查询中使用。
谢谢。
朱尔斯,
根据EXPLAIN输出,有几件事需要注意:
索引的选择取决于您正在使用的所有其他查询,但对于此特定查询,我想为VersionAddDate添加索引。 但是,由于MySQL只能对查询使用单个索引,因此索引如下所示:
INDEX `removemedate` (`RemoveMeDate` ASC, `VersionAddDate` ASC)
完成此操作后,EXPLAIN应该显示为:
+----+-------------+-------+------+---------------+--------------+---------+--------------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+--------------+---------+-------+------+-------------+
| 1 | SIMPLE | pads | ref | removemedate | removemedate | 4 | const | 1 | Using where |
+----+-------------+-------+------+---------------+--------------+---------+-------+------+-------------+
请注意,Extra下的filesort已消失。 这应该比以前的查询提供更好的性能。
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.