[Seasar-user:5467] Re: [S2Dao]MySQLでクエリキャッシュがヒットしない

Hirotaka HONMA [E-MAIL ADDRESS DELETED]
2006年 12月 14日 (木) 14:14:19 JST


本間です。

on Thu, 14 Dec 2006 12:12:28 +0900
in [Seasar-user:5459] Re: [S2Dao]MySQLでクエリキャッシュがヒットしない
Yusuke Kawabata <[E-MAIL ADDRESS DELETED]> wrote:

> > S2Daoとしては特別な処理を行っていません。
> > 素のJDBCでクエリキャッシュを利用できるか、ご確認いただけます
> > か? (そのコードを頂けるとありがたいです)
> 
> 下記サンプルコードで接続、クエリ発行、切断を繰り返し
> クエリキャッシュにヒットしていることを確認いたしました。

ご確認ありがとうございます。

> > また、クエリキャッシュはどの単位で効くものなのでしょうか?
> データベース単位(キャッシュ自体はmysqld全体で共有)に効きます。

とすると、効きそうに思えるのですが...

> 結果セットの大きさも考えたのですが、実際に発行しているクエリでは
> S2PagerのLimitOffsetラッパーを使用しているので10件以下になり、
> キャッシュ可能な最大値を超えていることもないようです。
> 
> --ここから---
> package com.housedo.model.dao.test;
> import java.sql.*;
> public class PrefTest {
> 
>   public static void main(String[] args) {
>     try{
>     Class.forName("com.mysql.jdbc.Driver").newInstance();
>     for(int i=0;i<100;i++){
>       Connection con = DriverManager.getConnection(
>           "jdbc:mysql://localhost/test", "root", "pass");
>       Statement stmt = con.createStatement();
>       ResultSet rs = stmt.executeQuery("SELECT * from E_PREF LIMIT 1");
>       while (rs.next()) {
>         System.out.println(rs.getString("PREF_ID"));
>       }
>       rs.close();
>       stmt.close();
>       con.close();
>     }
>     } catch (SQLException e1) {
>       //略
>     } catch (Exception e2) {
>       //略
>     }
>   }
> }
> --ここまで--

Statementではなく、PreparedStatementではどうでしょうか?

# [Seasar-user:5464]でも効いていないとのことで、S2Daoと↑の
# コードとの差異を考えるとStatementとPreparedStatementあたり
# かな、と。




Seasar-user メーリングリストの案内