我和周圍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語句將解釋它所有... –