回答編集履歴
2
回答を修正
answer
CHANGED
@@ -32,7 +32,8 @@
|
|
32
32
|
- 確実に10件、取得できるとは限らない。
|
33
33
|
-> 取得した行数をチェックし、10件に満たなければ 2つ目のSQL文をもう一度実行する、などで対処してください。
|
34
34
|
もっとも、"条件"を満たすレコードの件数が十分に多ければ、滅多に起きることはないと思いますが。
|
35
|
-
- "条件"を満たすレコードの件数が極端に多くなると`@rate`が 0 に丸められてしまい、
|
35
|
+
- "条件"を満たすレコードの件数が極端に多くなると`@rate`が 0 に丸められてしまい、
|
36
|
+
10件に満たない件数しか取得できない可能性が高くなる。
|
36
37
|
-> プライマリーキーである`user_id`の型が INT(11) である限りは、問題ないはずです。
|
37
38
|
[MariaDBの符号付き INT型の最大値は 2147483647](https://mariadb.com/kb/en/mariadb/int/) で、私の手元の環境(MySQL5.7)で確認した限りでは
|
38
39
|
`(10 * 1.00000000000) * 2 / 2147483647 = 0.000000009313226`
|
1
表記揺れを修正
answer
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
というわけです。
|
26
26
|
※ `@rate`は[ユーザー定義変数](https://mariadb.com/kb/en/mariadb/user-defined-variables/)というものです。
|
27
27
|
|
28
|
-
`@rate`はリアルタイムに求める必要はない上に正確な数値である必要も
|
28
|
+
`@rate`はリアルタイムに求める必要はない上に正確な数値である必要もないので、
|
29
29
|
例えば日次のバッチ処理で計算した値を別のテーブルに格納しておくなどすれば、さらに速度の改善が見込めます。
|
30
30
|
|
31
31
|
ただし、この方法には以下の欠点があります。
|