cfqueryでcachedwithin属性を使用すると、クエリはどのようにメモリに格納されますか。クエリに割り当てた名前だけで保存しますか?たとえば、インデックスページでクエリを1時間キャッシュし、getPeopleという名前を付けると、別のページ(または同じページ)で同じ名前のクエリがキャッシュされた結果を使用するか、より適切なロジックを使用しますか?それが同じクエリであるかどうかを判断するには?
また、クエリに変数がある場合、キャッシュは変数の値を考慮しますか?
cfqueryでcachedwithin属性を使用すると、クエリはどのようにメモリに格納されますか。クエリに割り当てた名前だけで保存しますか?たとえば、インデックスページでクエリを1時間キャッシュし、getPeopleという名前を付けると、別のページ(または同じページ)で同じ名前のクエリがキャッシュされた結果を使用するか、より適切なロジックを使用しますか?それが同じクエリであるかどうかを判断するには?
また、クエリに変数がある場合、キャッシュは変数の値を考慮しますか?
これは名前だけでなく、実行している正確なクエリでもあります。
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
この同じクエリをアプリの他の場所で呼び出すと、最初のクエリから半日以内であれば、キャッシュされたバージョンが取得されます。しかし、これらは新しいデータのためにデータベースにヒットします:
<!--- Different name, same SQL: A new cached query --->
<cfquery name="getEmployees" cachedwithin=".5" ...>
select name from employee order by name
</cfquery>
<!--- Different SQL, same name: Redefining the cached query --->
<!--- Note: As pointed out in comments, it's not really overwriting the old query
of the same name, but making a new one in the cache. The first one by the
same name is still in the cache, waiting for eviction. --->
<cfquery name="getPeople" cachedwithin=".5" ...>
select name from employee order by name desc
</cfquery>
そして、はい、それは変数を考慮に入れます。使用する場合(実行する必要があります)、データベースはクエリプランcfqueryparam
をキャッシュしますが、を使用しても、パラメータが変更された各クエリは、クエリキャッシュの観点からは異なるものとして扱われます。これは、異なるパラメータで何度も実行されるクエリで使用する場合、キャッシュヒット率が低いクエリでクエリキャッシュがフラッディングすることを意味することに注意してください。cachedwithin
cachedwithin
http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.htmlから
キャッシュされたデータを使用するには、現在のクエリで同じSQLステートメント、データソース、クエリ名、ユーザー名、パスワードを使用する必要があります。
つまり、これらは「同じクエリかどうかを判断する」「キー」です。
変数?はい、使用する限り<cfqueryparam>