teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

修正

2019/02/11 04:08

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -25,5 +25,4 @@
25
25
  [json型でもindexが貼りたい!](https://qiita.com/szkennel/items/369885242b5d95f15d5d)
26
26
  但し、扱えるのは5.7以降です。
27
27
 
28
- それから、全文検索で検索対象として1万件してもユザーが見わけありません
28
+ それから、全文検索で検索対象として1万件想定していないなら、一定件数でペジングすなどの仕組みでのSQLで検証すべきです
29
- 一定件数でページングするなどを行えばSQLで突合する件数を減らすことができ、効果は望めます。

4

追記

2019/02/11 04:08

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -23,4 +23,7 @@
23
23
  --
24
24
  tagmapの指すテーブルにtagmapの代わりにJson型でタグを持たせる方法だと、検索対象の件数自体を減らせるので効果があるかもしれません。
25
25
  [json型でもindexが貼りたい!](https://qiita.com/szkennel/items/369885242b5d95f15d5d)
26
- 但し、扱えるのは5.7以降です。
26
+ 但し、扱えるのは5.7以降です。
27
+
28
+ それから、全文検索で検索対象として1万件返してもユーザーが見るわけありません。
29
+ 一定件数でページングするなどを行えばSQLで突合する件数を減らすことができ、効果は望めます。

3

追記

2019/02/11 04:06

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -17,4 +17,10 @@
17
17
  [8.9.3.1 クエリーキャッシュの動作](https://dev.mysql.com/doc/refman/5.6/ja/query-cache-operation.html)
18
18
  > テーブルが変更された場合、そのテーブルを使用するキャッシュされたすべてのクエリーが無効になり、キャッシュから削除されます。これには、変更されたテーブルにマップされた MERGE テーブルを使用するクエリーも含まれます。テーブルは、INSERT、UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE、または DROP DATABASE などの多くの種類のステートメントによって変更できます。
19
19
 
20
- 頻繁に更新されるテーブルのキャッシュは意味がありません。
20
+ 頻繁に更新されるテーブルのキャッシュは意味がありません。
21
+
22
+ 追記
23
+ --
24
+ tagmapの指すテーブルにtagmapの代わりにJson型でタグを持たせる方法だと、検索対象の件数自体を減らせるので効果があるかもしれません。
25
+ [json型でもindexが貼りたい!](https://qiita.com/szkennel/items/369885242b5d95f15d5d)
26
+ 但し、扱えるのは5.7以降です。

2

追記

2019/02/11 03:55

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -12,4 +12,9 @@
12
12
 
13
13
  バッチ処理でもないのに10億件中から1万件取り出す想定は何なのでしょう?
14
14
 
15
- キャッシュ以前に、10億件の持ち方と取り出す単位など設計の見直しだと感じます。
15
+ キャッシュ以前に、10億件の持ち方と取り出す単位など設計の見直しだと感じます。
16
+ キャッシュすることに意味が無い理由については、以下です。
17
+ [8.9.3.1 クエリーキャッシュの動作](https://dev.mysql.com/doc/refman/5.6/ja/query-cache-operation.html)
18
+ > テーブルが変更された場合、そのテーブルを使用するキャッシュされたすべてのクエリーが無効になり、キャッシュから削除されます。これには、変更されたテーブルにマップされた MERGE テーブルを使用するクエリーも含まれます。テーブルは、INSERT、UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE、または DROP DATABASE などの多くの種類のステートメントによって変更できます。
19
+
20
+ 頻繁に更新されるテーブルのキャッシュは意味がありません。

1

追記

2019/02/11 02:50

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,7 +1,9 @@
1
1
  [8.9.3 MySQL クエリーキャッシュ](https://dev.mysql.com/doc/refman/5.6/ja/query-cache.html)
2
2
  上記は確認されていますか?
3
+ > クエリーキャッシュは、あまり頻繁に変更されないテーブルがあり、それに対してサーバーが多くの同一のクエリーを受け取る環境で役立つことがあります。
3
4
 
5
+ 上記のこの要件を満たしたものですか?10億件を想定したテーブルがそうであるようには思えません。
4
- 仮に10億件のデータを全てキャッシュに格納すれば、2回目の性能が出せるとは言い切れません。
6
+ また、仮に10億件のデータを全てキャッシュに格納すれば、2回目の性能が出せるとは言い切れません。
5
7
  逆に遅くなる場合もあります。
6
8
 
7
9
  > パフォーマンスのこれ以上のチューニングが難しく(パーティションなどが使いづらい)