我和周围50万记录的表,所有我想要做的就是地方使用限制LIKE通配符选择查询,不管我做什么,它需要足够长的时间显示结果。这对我来说毫无价值,我怎么能让它运行得更好?我的查询低于MySQL查询长时间的记录,以足够长的时间,以显示记录
QUERY
if (isset($_GET['res'])) {
$value = $_GET['res'];
$val = explode(" ", $value);
$query = "SELECT productid, productname, retailprice, lmnr, suplier
FROM comp where productname = '$value' ";
$count = count($val);
for ($i = 0; $i < $count; $i++) {
$query .= " union Select productid, productname, retailprice, lmnr, suplier
from comp where productname like '%" . $val[$i] . "%' ";
}
$query .=" GROUP BY productid, productname, retailprice, lmnr, suplier LIMIT $start, $limit";
}
$result_query = $db->query($query);
任何帮助表示赞赏,感谢
注意 我要打破这种查询到工会,因为它是用于搜索目的,我想要使用SPACES分隔的字符串的所有可能匹配进行查询搜索,例如A TEST QUERY。应视为'%A%','%TEST%','%QUERY%'
[mysql-indexes](http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html) – vbrmnd
你有产品名称的索引吗? –
使用union/group by with LIKE%..%with 500000的记录,这将导致使用deepscans(读取高起始值)的“Using temporary; Using filesort”,并且最类似地,这会生成基于MyISAM磁盘的临时表(什么需要通过quicksort algoritme分组在磁盘上,readom I/O读取和写入会缓慢),因为大多数情况下结果不适合内存。EXPLAIN语句将解释它所有... –