MySQL使用Where,GroupBy和OrderBy子句对查询进行索引

时间:2016-10-13 13:40:28

标签: mysql sql indexing indices

如何改善以下查询的效果?哪些索引可能会有所帮助?

public byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
{
    byte[] decryptedBytes = null;
    byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    using (MemoryStream ms = new MemoryStream())
    {
        using (RijndaelManaged AES = new RijndaelManaged())
        {
            AES.KeySize = 256;
            AES.BlockSize = 128;
            var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
            AES.Key = key.GetBytes(AES.KeySize / 8);
            AES.IV = key.GetBytes(AES.BlockSize / 8);
            AES.Mode = CipherMode.CFB;
            AES.Padding = PaddingMode.PKCS7;
            using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                cs.Close();
            }
            decryptedBytes = ms.ToArray();
        }
    }
    return decryptedBytes;
}
public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
    byte[] encryptedBytes = null;
    byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    using (MemoryStream ms = new MemoryStream())
    {
        using (RijndaelManaged AES = new RijndaelManaged())
        {
            AES.KeySize = 256;
            AES.BlockSize = 128;
            var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
            AES.Key = key.GetBytes(AES.KeySize / 8);
            AES.IV = key.GetBytes(AES.BlockSize / 8);
            AES.Mode = CipherMode.CFB;
            AES.Padding = PaddingMode.PKCS7;
            using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                cs.Close();
            }
            encryptedBytes = ms.ToArray();
        }
    }
    return encryptedBytes;
}

2 个答案:

答案 0 :(得分:0)

对于此查询,基本上您使用索引的唯一希望是:UI_data(window, ProjectionDate, PlayerCount)UI_data(window, PlayerCount, ProjectionDate)。哪个更好取决于哪个选择更少的记录。 。 。我猜第一个会更好。

答案 1 :(得分:0)

我建议这是最好的指数:

INDEX(window,          -- first because "="
      ProjectionDate   -- range
     )                 -- nothing after range will be looked at

这比之前建议的3列指数略有优势,因为指数会略微变小。

更多讨论:Index cookbook

我希望会有两种类型 - 一种用于GROUP BY,另一种用于ORDER BY。如果您使ORDER BYGROUP BY列表相同,则运行速度会快一些。

可能的错误:如果ProjectionDateDATE数据类型,那么范围是三个月加一天。推荐这种模式:

    ProjectionDate >= '2015-07-25'
AND ProjectionDate  < '2016-07-25' + INTERVAL 3 MONTH