---
# System prepended metadata

title: 2021-03-03 Pair-A v2 定例
tags: [Pair-A v2]

---

# 2021-03-03 Pair-A v2 定例

## 疑問
### 粟田
#### dynamoDBみたいなNoSQLって使ったことありますか？
めちゃめちゃ速度を求めるなら最終的にはNoSQLにたどり着く？
- RDBとNoSQLどっちを使うか判定する基準
    - 採用例
        - アイデアがある人と技術者をマッチングさせる
        - Firebaseをメインに使ってサービスを開発しているので、そのままNoSQLを使った
        - 表への出力などは相性が悪い
        - 保存したいデータの変更に柔軟に対応できる
        - トランザクションよりインデックスの方が面倒だった（そもそもインデックスを適切に貼らなければ並び替えできない）
        - FirebaseならFireStore、AWSならdynamoDBっぽくサービスに依存する？
        - 開発速度を最優先するなら、全てFirebaseにあやかるとか、そういう使い方もできそう（後から作り直すのはかなりヘビーだという意見もあり）
    - 質問する方針で

#### あえてB木じゃないインデックスを使ったことありますか？
あるケースにおいては、B木よりも高速になることがあると思うが、そこまでデータベースで高速化を追い求めるべきか？
もっと違うところ（ネイティブアプリにするとか負荷分散をするとか）に力を入れたほうが良さそうに感じる
- 高速化をするためにそこまでデータベースで頑張るべきか？
- WEBシステムじゃなくす、負荷分散（ボトルネックの場所によっては無意味）
- 厳密に扱わなくて良いデータなら正確性より速度を重視するような作りにしてしまうのもあり
    - 例えば、Twitterのタイムラインに表示されるいいね数は正確なわけではないらしい
- 対応できるなら両方するべきだが、片方しかできないからできる方やればいいのでは？

#### カバリングインデックスを使ったことありますか？
ユーザーが検索できる条件が20項目くらいあったとして、その全てにインデックスを貼れば当然早くなると思うが、今度は更新に時間がかかる。
結局のところ、ユーザーが検索速度をとるか更新速度をとるかみたいな話になるとは思うが、実際にこういうことがあったよ〜みたいな話があれば聞いてみたい
- 実際の使った事例があればきく
- 検索と更新の比率によって決める？
- 更新を夜間バッチで行うなどリアルタイムでデータが更新されなくても良いデータなら有効に使えそう（Qiitaのランキングなら多分1日1回）
    - 以前に質問した
        - 更新系がなくてほぼ参照だけのテーブルには相性が良い（マスタ系など）
- 質問しない

#### インデックスを貼るまでの手順
一般的にインデックスを貼るという意思決定されるまでの流れ
- 自分は気になってから貼ることが多い
- 遅いな〜と思ったら→どれくらいテーブルに件数が入りそうか+検索条件で決める
    - 以前に質問した
        - 基本的にインデックスを使うのはサービス開始後にスロークエリで遅いクエリを発見してから
        - アジャイルならこれでOK
        - ウォーターフォールなら別で発注貰えばいいでしょ
- 質問なし

#### データベースのクライアントツール何使ってますか？
Windows -> A5M2
Mac -> Sequel Pro
intellij IDEAについてるやつ
TablePlusがよさげ？
- おすすめを聞いてみる
    - 質問する（使ってるツールとこだわりの設定とかあれば）

### 玄徳
- ~~貼るべきインデックスをどういうプロセスで考えて決めればよいのかわからない~~
    - ~~（例）birth_dateをSELECTするんやからbirth_dateをCREATE INDEXすればええやろ~~
        - ~~→適用されない~~
        - ~~→LIKEで後方検索するときは適用されない~~
        - ~~→なぜ？~~
- ~~フルスキャンとは？~~
    - ~~B木使ってるのに結局全部の葉をみないといけないような作りになってるから意味ないよ、という意味？~~
- ↑なんとなくわかりました
  - どういうふうにインデックスが利用されるか想像してみれば、わかりそうな気がする
  - どのタイミングでどのカラムが参照されるか？二分探索的にすばやく検索できると嬉しいタイミングはどこか？みたいな
- 時間の計測→改善されているかの確認の作業がめちゃくちゃめんどくさいと感じた
    - 実務でもこれくらいめんどくさい作業をするものなのか？
    - GUIとかでもっとわかりやすく操作・確認する手段はないのか？
    - 実務でもこれやってますか？
      - 遅いクエリをどのようにして改善するのか？具体的なプロセスなどあれば知りたい
    - 既に質問済み
        - モニタリングツールを使う（awsとかならawsで提供しているサービスをつかう）
        - プロメテウス、DATADOG、NETDATA、pt-query-digest、（昔はzabix）など
- SQL考えるにあたって、これ読んどけ！みたいな本があったら知りたい
  - SQLアンチパターン
  - sqlポケットリファレンス
  - 質問する

### 永井
- 使用しているDBとその選定基準
- SIerだとposgre、WEB系だとmysqlを使用するイメージがある。なぜか？
    - ペアA
        - 他のツールに依存して決定する（posgreにした対応していないツールとか）
    - プラハチャレンジではMySQL前提なのに何か理由はあるのか？
- sqlチューニングを体系的、網羅的に学べるブログ、書籍はありますか？
    - 特になし
- 技術書おすすめ（ジャンル問わず）
 
###### Tags: `Pair-A v2`