sql >> Databasteknik >  >> RDS >> Mysql

MySQL-val verkar väldigt långsamt men kan inte tänka på hur man ska förbättra?

Jag tror att det finns några problem med frågan och själva tabelldefinitionen.

  • Table.name är en 4K-kolumn
  • Frågan sorteras efter den kolumnen

Du sorterar baserat på en kolumn där du lagrar strängar. För att sortera efter strängar måste strängjämförelser utföras. Strängjämförelse tenderar att vara en långsam operation och med tanke på storleken på kolumnen du använder är det mycket troligt att det orsakar en märkbar prestandaträff.

Vi har ingen indikation på innehållet i ditt name kolumn och det verkar svårt att komma på ett verkligt namn som skulle kräva det många tecken.

Om den här strängen har flera databitar som skiljer sig begreppsmässigt, kanske kolumnen bör delas upp i flera separata kolumner, om möjligt, och sedan normaliseras efter behov.

Om du kan dela upp innehållet i den kolumnen i flera mindre och sedan använda dem, skulle strängjämförelserna, även om de fortfarande är dyra, bli "snabbare" helt enkelt för att strängarna som jämförs kommer att vara betydligt kortare än vad de är nu.

En annan sak att tänka på är om du kan optimera sökningen genom att undvika strängjämförelser helt och hållet eller genom att undvika frågor som kommer att orsaka en fullständig tabellsökning trots att du har definierat index.

För det bör du titta på att använda explain med din fråga, så att du kan få en bättre förståelse av Frågeexekveringsplan

Citerar dokumenten (min betoning):

Redigera 1

Du har förtydligat att ditt name kolumnen är faktiskt för användaranteckningar. I det här fallet tycker jag att du bör överväga följande (detta utöver). till det som redan har nämnts):

  1. Byt namn på kolumnen till något som överensstämmer med dess faktiska innehåll
  2. Ta bort indexet från kolumnen
  3. Gör inte använd den kolumnen för att söka, sortera eller någon annan operation än att bara välja den för att visa den (det skulle vara mycket sällsynt om det behövde användas till något annat, IMHO.)
  4. Du kan eventuellt överväga att ändra kolumnen till en text typ och du behöver inte oroa dig så mycket för användarnas uppsatser trunkeras utan förvarning (såvida inte det grafiska användargränssnittet har tillämpat samma inmatningslängd för användaren)


  1. Radversionering i MySQL

  2. Hur utesluter du helger från en date_sub?

  3. Vilket är snabbast COALESCE ELLER ISNULL?

  4. Skäl att förvandla Access-appar till webbaserade appar