sql >> データベース >  >> RDS >> Mysql

このMysqlの単純なクエリを最適化する方法

    または 同じフィールドまたは範囲に基づいていない場合の条件( <など) 、> LIKE )インデックスを利用するMySQLの能力を実際に低下させます。クエリを個別の単純なクエリに分割して再構築し、UNIONすることができます。このように分離することで、MySQLはUNION内の各クエリの異なるインデックスを利用できるようになります

    SELECT `u`.`user_id`, `c`.`company`
    FROM `users` AS `u` LEFT JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
    WHERE `u`.`user_id` = 'search_term' 
    UNION DISTINCT 
    SELECT `u`.`user_id`, `c`.`company`
    FROM `users` AS `u` LEFT JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
    WHERE `u`.`lname` LIKE 'search_term%'    
    UNION DISTINCT 
    SELECT `u`.`user_id`, `c`.`company`
    FROM `users` AS `u` LEFT JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
    WHERE `u`.`email` LIKE 'search_term%'
    UNION DISTINCT 
    SELECT `u`.`user_id`, `c`.`company`
    FROM `users` AS `u` INNER JOIN `companies` AS `c` ON `c`.`user_id` = `u`.`user_id`
    WHERE `c`.`company` LIKE 'search_termeo%'
    ;
    

    また、LEFT JOINの右側のテーブルの条件(「そのテーブルからの一致なし」ではない)は基本的にINNER JOINであるため、最後のJOINをINNERに変更したことに注意してください。

    >

    UNION DISTINCT ただし、複数の条件を満たすレコードが繰り返されないようにするために使用されます... Companies.companyの場合 一意ではありません(つまり、会社ID 1は「Blah」と呼ばれ、会社ID 12は「Blah」とも呼ばれます)。これらは、元のクエリにない場所でもマージされます。潜在的な問題である場合は、各 SELECTにcompany_idを含めることで解決できます。 。




    1. macOSのPostgreSQLログはどこにありますか?

    2. MySQLトリガーを編集できないのは本当ですか?それを削除して新しいトリガーを作成する必要がありますか?

    3. 列のデフォルト値としてのシーケンス

    4. PreparedStatementは、クエリ内のパラメーターを無視します。java.sql.SQLException:パラメーターインデックスが範囲外です(1>パラメーターの数。0)