私はdjangoモデルを持っていFoo
ます。これには、さまざまな既知の一貫した名前の属性(alpha
、、beta
...)と、可変数のBar
;のインスタンスがあります。それ自体が属性( 、、...)Bar
を持つモデルです。それぞれの名前や値などをモデルの列として持つことはできません。それらの数が多すぎて、名前が異なり、一部は少数のfooにのみ適用されるためです。したがって、モデル内にForeignKey関係があるので、それぞれがそれが属するものを知っており、Djangoを使用できます。例:name
value
bar
Foo
Bar
bar
foo
select_related()
foos = Foo.objects.filter(alpha__lte=10).select_related()
for foo in foos:
bars = foos.bar_set.filter(name__in=('prop1', 'prop2', 'prop5'))
for bar in bars:
print '%s = %d' % (bar.name, bar.value)
これはうまくいくようです...しかし、MySQLでデータを整理するための本当に最良の方法ですか?
私が正しい方向に進んでいる場合、別の質問があります。どうすればこれをスピードアップできますか?合計で2,700,000Foos
と16,900,000があることを付け加えておきBars
ます(インデックスが設定されているなど)。私の出力は特に遅いです-プロパティの列を持つテキストファイルを書きたいです:、、、、foo.alpha
など...ここでfoo.beta
、、などは属性によって選択されます。私は出力フィールドのリストを試してきました:foo.bar1.value
foo.bar2.value
bar1
bar2
name
bar_output_fields = ['prop1', 'prop2', 'prop5']
all_output_fields = [('%4d', 'alpha'),
(%12.6f', 'prop1'),
(%10.3e', 'beta'),
(%10.3e', 'prop2')
('%2d', 'prop5')]
fo = open('output.txt', 'w')
for foo in foos:
bars = foos.bar_set.filter(name__in=bar_output_fields)
for bar_output_field in bar_output_fields:
bar = bars.filter(name=bar_output_field).get()
setattr(foo, bar_output_field, bar.value)
for (fmt, name) in all_output_fields:
print >>fo, fmt % getattr(foo, name),
print >>fo
fo.close()
ただし、クエリが1000秒を超える値を返す場合、これは非常に遅くなりますfoo
。ここでパフォーマンスを改善するための提案はありますか?何か大きなものが欠けているような気がします...