sql >> Database >  >> RDS >> Mysql

EF:onjuist gebruik van ruimtelijke/fulltext/hash-index en expliciete indexvolgorde

Heb het opgelost.

Vervang in uw migratiebestand .Index-vermeldingen door sql-opdrachten zoals hieronder

CreateTable(
        "dbo.Articles",
        c => new
            {
                articleId = c.Int(nullable: false, identity: true),
                title = c.String(nullable: false, unicode: false),
                digest = c.String(unicode: false),
                content = c.String(nullable: false, unicode: false),
                imgLink = c.String(nullable: false, unicode: false),
                releaseDate = c.DateTime(precision: 0),
                userId = c.Int(nullable: false),
            })
        .PrimaryKey(t => t.articleId)
        .ForeignKey("dbo.Users", t => t.userId, cascadeDelete: true)
        .Index(t => t.userId); // REMOVE THIS

Voeg het bijbehorende SQL-commando toe onderaan uw Up()-methode (voor elke index)

Sql("CREATE index `IX_userId` on `Articles` (`userId` DESC)");

De problemen die ik dan toevoeg met DataReaders zijn gerelateerd aan de MySQL-connector. MySQL-connector ondersteunt geen meerdere actieve verbindingen. Om dit aan te pakken, als je dit in je controller had

public IEnumerable<Article> GetArticles()
{
    return db.Articles;
}

Nu zou het moeten zijn

public IEnumerable<Article> GetArticles()
{
    return db.Articles.ToList(); // ToList() will manage the request to work with only ONE data reader, 
}

Als u niet weet hoe u uw .Index() naar SQL-commando's moet converteren, gewoon

update-database -verbose

en alle SQL-commando's worden weergegeven




  1. Hoe u URL's opslaat in MySQL

  2. Voer MySQLDump uit zonder tabellen te vergrendelen

  3. Inleiding tot PL/SQL Bulk Collect in Oracle Database

  4. Een-op-nul-of-een-relatie implementeren in SQL Server