ホームページ >データベース >mysql チュートリアル >ページネーションを使用して MySQL JOIN の最新の行のみを効率的に取得するにはどうすればよいですか?
ページネーションを使用した MySQL JOIN でのみ最新の行を取得する
customer_data のような履歴データ テーブルを扱う場合は、結合することが望ましいことがよくあります。最新の行のみを別のテーブルに転送しながら、管理も行いますページネーション。
元のクエリ:
SELECT *, CONCAT(title,' ',forename,' ',surname) AS name FROM customer c INNER JOIN customer_data d on c.customer_id=d.customer_id WHERE name LIKE '%Smith%' LIMIT 10, 20
WHERE 句を使用した最適化された JOIN:
最新のもののみを取得する各顧客の行を作成するには、次の条件を WHERE に追加します。句:
... WHERE d.customer_data_id IN ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
代替のインデックス作成ソリューション:
特に負荷の高いクエリでパフォーマンスを向上させるには、customer_data の (customer_id, customer_data_id) 列にインデックスを作成することを検討してください。 。これにより、MySQL は各顧客の最新の行を迅速に識別できるようになります。
インデックスを使用した WHERE 句の例:
... WHERE d.customer_id = c.customer_id AND d.customer_data_id = ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
LIKE を使用した CONCAT:
はい、CONCAT と LIKE を使用することは、複数のフィールドを検索する有効な方法です一緒に連結されました。これは、元の列にインデックスが付けられておらず、通常はテーブル全体のスキャンが行われる場合に特に便利です。
追加の考慮事項:
以上がページネーションを使用して MySQL JOIN の最新の行のみを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。