私はmysqlデータベースで117秒以上かかるこのクエリを持っています。より速い結果のためのサブクエリ
select users.*, users_oauth.* FROM users LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id WHERE (
(MATCH (user_email) AGAINST ('sometext')) OR
(MATCH (user_firstname) AGAINST ('sometext')) OR
(MATCH (user_lastname) AGAINST ('sometext')))
ORDER BY user_date_accountcreated DESC LIMIT 1400, 50
サブクエリを最適化するためにどのように使用できますか?
3つのフィールドは、フルテキストです:
ALTER TABLE `users` ADD FULLTEXT KEY `email_fulltext` (`user_email`);
ALTER TABLE `users` ADD FULLTEXT KEY `firstname_fulltext` (`user_firstname`);
ALTER TABLE `users` ADD FULLTEXT KEY `lastname_fulltext` (`user_lastname`);
異なるテーブルのユーザーフィールドで検索するには、ウェブサイトで唯一の検索入力があります。
制限がたとえばLIMIT 0,50
の場合、クエリは3秒未満で実行されますが、LIMITが増加するとクエリが非常に遅くなります。
ありがとうございました。
FULLTEXT(user_email, user_firstname, user_lastname)
そして、ちょうど1に3試合を変更:
このクエリでEXPLAINを実行して結果を掲載できますか? – Besi
列がどのテーブルから来るのかを特定します。 –
検索対象のフィールドに全文索引が作成されていますか? – Shadow