使用EXISTS函数优化性能MySql SELECT查询

时间:2015-11-10 10:23:19

标签: mysql sql performance

我有这个SQL查询:

//create command
MySqlCommand cmd = new MySqlCommand("GetArchiveData", connection);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("startTime", startIn);
cmd.Parameters["startTime"].Direction = ParameterDirection.Input;

cmd.Parameters.AddWithValue("endTime", endIn);
cmd.Parameters["endTime"].Direction = ParameterDirection.Input;

cmd.Parameters.AddWithValue("tagID", tagIn);
cmd.Parameters["tagID"].Direction = ParameterDirection.Input;

cmd.Parameters.AddWithValue("FullDay", fdIn);
cmd.Parameters["FullDay"].Direction = ParameterDirection.Input;

cmd.Parameters.AddWithValue("iteration", iterationIn);
cmd.Parameters["iteration"].Direction = ParameterDirection.Input;

if (cmd.Connection.State == ConnectionState.Closed)
{
    cmd.Connection.Open();
}
MySqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    TagData tagData = new TagData();
    tagData.TagID = tagIn;
    tagData.Dsttimestamp = Convert.ToInt32(dr["timestamp"]);
    tagData.PvValue = Convert.ToInt32(dr["sp"]);
    tagData.PvValue = Convert.ToInt32(dr["pv"]);

    tagDataList.Add(tagData);
}
dr.Close();

this.CloseConnection();
return tagDataList; 

查询的持续时间为19秒。

当我删除EXISTS时,查询的持续时间仅为0.4秒。

无论如何,我需要存在函数来根据所选属性过滤产品。

行数表:

  • catalog_parameter_product_value:10000
  • catalog_product:1000
  • catalog_category_product_mm:10000
  • catalog_category:10
  • catalog_category_parameter_mm:10
  • catalog_parameter_product_value_parameter_codebook_mm:10000

说明: enter image description here

我可以优化查询并将持续时间延长到几毫秒吗?

0 个答案:

没有答案