私は50kk以上の行を持つテーブルを持っています。MySQLクエリの値のリスト
トラックポイント:
+----+------------+-------------------+
| id | created_at | tag |
+----+------------+-------------------+
| 1 | 1484407910 | visitorDevice643 |
| 2 | 1484407913 | visitorDevice643 |
| 3 | 1484407916 | visitorDevice643 |
| 4 | 1484393575 | anonymousDevice16 |
| 5 | 1484393578 | anonymousDevice16 |
+----+------------+-------------------+
'のcreated_at' が行のタイムスタンプが追加されます。 と私はタイムスタンプのリストを持っているが、このような例:
timestamps = [1502744400, 1502830800, 1502917200]
IはIとI +タイムスタンプの1間の間隔ごとに、すべてのタイムスタンプを選択する必要があります。それは次のようになりますDjangoのORMを使用して
:実際にリストをタイムスタンプのので
step = 86400
for ts in timestamps[:-1]:
trackpoint_set.filter(created_at__gte=ts,created_at__lt=ts + step).values('tag').distinct().count()
は非常に非常に長いとテーブルで行の多くを持って、最終的に私は500タイムアウト
を取得し、私の質問は1つの未処理のSQLクエリの行と値のリストを結合する方法[(1502744400, 650), (1502830800, 1550)...]
ここで、2番目の値はタイムスタンプで、2番目の値は各間隔の一意のタグの数です。
650とは何ですか? 1550は何ですか?参照:[私は非常に単純なSQLクエリと思われるものに対してMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve- for-what-like-to-me-to-be-a-very-simple-sql-query) – Strawberry
ありがとう、私の質問を修正しました –
created_atのインデックスを持っていますか?大規模なクエリの場合、インデックスを使用すると大幅なパフォーマンスが向上する可能性があります。 –