2つのプロジェクト(AとB)があります。 彼らはどちらもCakePHPフレームワーク上に構築されており、基本的に同じ構造を持っています。つまり、両方のデータベースが同じ構造を持っています。それらが同一であるとしましょう。「一致しない」と検索するとCakePHPアプリがクラッシュする
私は検索を実行するのに必要なすべてのデータを入れたビューを作成しました。私はそれをsearch_areasと呼んでいました。ビューにある表の各列はFULLTEXT索引です。
今、私がプロジェクトAで検索を実行すると、それは魅力のように機能します。しかし、私がプロジェクトBでそれをするとき、それは永遠にかかります。実際には、コード内の何かが詰まっています。データベースは正常に動作しますが、アプリケーションは約10分間使用できません。誰かがこのような問題に遭遇しましたか?
これは、検索が実行されたときに実行されるSQLです:
SELECT
Product.*,
MainImage.*,
Currency.rate,
Category.green_tax,
CategoriesCategory.full_alias,
(Product.price*Currency.rate + Category.green_tax)*1.24 as real_price,
MATCH (SearchArea.Cname,SearchArea.Mname,SearchArea.Pname,SearchArea.description,SearchArea.special_description,SearchArea.model,SearchArea.part_number,SearchArea.series,SearchArea.color,SearchArea.big_string) AGAINST ('+search term' IN BOOLEAN MODE) as score
FROM `products` AS `Product`
LEFT JOIN currencies AS `Currency` ON (`Product`.`currency` = `Currency`.`code`)
LEFT JOIN categories AS `Category` ON (`Product`.`category_id` = `Category`.`id`)
LEFT JOIN manufacturers AS `Manufacturer` ON (`Product`.`manufacturer_id` = `Manufacturer`.`id`)
LEFT JOIN categories_categories AS `CategoriesCategory` ON (`Product`.`category_id` = `CategoriesCategory`.`category_id`)
LEFT JOIN search_areas AS `SearchArea` ON (`SearchArea`.`id` = `Product`.`id`)
LEFT JOIN `product_images` AS `MainImage` ON (`MainImage`.`product_id` = `Product`.`id` AND `MainImage`.`main` = 1)
WHERE
MATCH (`SearchArea`.`Cname`,`SearchArea`.`Mname`,`SearchArea`.`Pname`,`SearchArea`.`description`,`SearchArea`.`special_description`,`SearchArea`.`model`,`SearchArea`.`part_number`,`SearchArea`.`series`,`SearchArea`.`color`,`SearchArea`.`big_string`) AGAINST ('+search term' IN BOOLEAN MODE)
AND `Product`.`active` = 1
LIMIT 15
任意のアイデア?
****** EDIT *****
私はmysqlでクエリを実行しましたが、問題があるようです。非常に長い時間がかかります(2〜5分)。クエリを最適化しなければならないと思われます。助けてくれてありがとう。誰かがどのようにMATCH ... AGAINST ...構文を効率的に使うか考えている人は、ビューやいくつかの連結された要素を投稿してください。私はおそらく上記の解決策を放棄するでしょう。
?デバッガを実行して、「ジャムする」場所を特定しましたか?このクエリを実行するコードは何ですか? – deceze
mysqlでクエリを実行しましたが、問題があるようです。非常に長い時間がかかります(2〜5分)。クエリを最適化しなければならないと思われます。助けてくれてありがとう。誰かがどのようにMATCH ... AGAINST ...構文を効率的に使うか考えている人は、ビューやいくつかの連結された要素を投稿してください。私はおそらく上記の解決策を放棄するでしょう。 –