sql >> データベース >  >> RDS >> Mysql

ASPMVCMsSqlからMySQLへの移行

    2番目のクエリは本当に大丈夫ですか?

    1)Id =d.Id、<=なぜこのコンマ(それほど重要ではない)ですか? ('ID ='は冗長です)

    2).Where(m => m.Trash ==false)<='Trash'は選択に含まれていないため、このプロパティは現時点では不明です

    3).OrderByDescending(f => f.Created)<='Created'のidem

    4).ToList()の後にコンマがあるのはなぜですか?

    生成されたデータを使用してDDL(MWEではない)を簡略化しました。VS2013で問題を再現しました。

    また、データベースに対してLINQPadを使用してクエリを直接テストしましたが、3番目のテストでも同じ問題が発生します。おそらく、ドライバーmysqlのバグです。

    trdposts.Select(a => new {
        Created = a.Created,
        Body = a.Body,
        Comments = a.Posttrdcomments
                    .Select(d => new { Body = d.body, Id = d.Id, d.Created, d.Trash})
                    .Where(m => m.Trash == 1)
                    .OrderByDescending(f => f.Created)
                    .Skip(33)
                    .Take(10)
                    .ToList()
        })
    

    より短いSQLクエリを与える:

    SELECT t1.PostId, t1.body, t1.Id, t1.Created, t1.Trash
    FROM trdposts AS t0
        OUTER APPLY (
          SELECT t2.body, t2.Created, t2.Id, t2.PostId, t2.Trash
          FROM trdcomments AS t2
          WHERE ((t2.PostId = t0.Id) AND (t2.Trash = 1))
          ORDER BY t2.Created DESC
      ) AS t1
    ORDER BY t1.Created DESC
    

    .Skip()と.Take()がないと、「LEFTOUTERJOIN」がうまくいきます



    1. 有効なデータディレクトリが見つかりませんでした。 MySQLジェネリックバイナリインストール

    2. SELECT句に集計関数が存在しない場合のGROUPBYの動作

    3. ユーザーのmysqlアクセスが拒否されました(php経由で接続している場合にのみ発生します)

    4. 複数列のインデックスを使用している場合でも、複数列のクエリが対応する単一列のクエリよりも大幅に遅いのはなぜですか?