我正在努力加快查询......
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中的单词分成单词表将会是一场噩梦。
有什么想法吗? 编辑:(也提供了实际的表名)
答案 0 :(得分:2)
答案 1 :(得分:0)
朱,
您需要在查询中提供解释输出。类似的东西:
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来构建表结构。这将有助于我们识别您的索引结构以及它们是否在查询中使用。
感谢。
答案 2 :(得分:0)
朱,
基于EXPLAIN输出,有几点需要注意:
索引的选择取决于您正在使用的所有其他查询,但对于此特定查询,我想为VersionAddDate添加索引。但是,由于MySQL只能对查询使用单个索引,因此索引将如下所示:
INDEX `removemedate` (`RemoveMeDate` ASC, `VersionAddDate` ASC)
执行此操作后,应该阅读以下内容:
+----+-------------+-------+------+---------------+--------------+---------+--------------+-------------+
| 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已消失。这应该比您之前的查询提供更好的性能。
感谢。