Apache DerbyでXML型を使ってるんだけど、
これをCLOBにキャストすると、凄く遅い。
リファレンスに掲載されている方法。
http://db.apache.org/derby/docs/10.3/ref/rrefsqljtypexml.html
SELECT XMLSERIALIZE (xcol as CLOB) FROM myXmlTable
これでSELECTすると、とても遅い。
これを
SELECT XMLSERIALIZE (xcol as VARCHAR(32000)) FROM myXmlTable
にしただけで、ものっそ早くなる。
「凄く」とか「とても」とか「ものっそ」とか
ホント曖昧なことばっかり言って申し訳ないんだけど
計測してないから、とても定量的には話せないんだ。
データサイズにも依ると思うけど、数百件の検索結果で
体感100倍ぐらい差があるんじゃないかと思うぐらい遅い。
(0.1秒で終わる処理に10秒掛かる感じ)
でも、VARCHARにすると、今度は32,672文字までしか扱えなくて困る。
http://db.apache.org/derby/docs/10.3/ref/rrefsqlj41207.html
XML型で、たとえば10万文字ぐらい扱いたい場合に
どうすれば良いか、知ってる or アイデアある方、いませんか?
複数のVARCHARに切り出して連結するとか、
いっそPostgreSQL8.3に乗り換えてJDBC4.0のjava.sql.SQLXML使うとか?
(あ、もしかしてCLOB(100000)にキャストすれば、遅くなかったりとか?)