这是我的查询
SELECT
id
FROM
`MyTable`
WHERE
`env` = 'default'
AND (`HTML` = '' OR `HTML` IS NULL)
order by `id` desc
limit 100;
关于它的运行解释,我会得到:
Possible keys: idx_env (related to env field in where clause)
Key: id
Key length: 4
Rows: 200
Filtered: 9.50
Extra: using where
根据上面的解释,我了解到mySQL将检查200条记录。 并且应该没有大的性能问题
但是我经常遇到的是50“的慢查询,实际上在我的Aurora群集上激活慢查询日志时,我看到以下报告:
# Query_time: 49.512712 Lock_time: 0.000065 Rows_sent: 28 Rows_examined: 6795665
似乎没有一致的反馈:表格中解释的检查行是所有记录中的200条记录...
编辑
env和id字段已被索引。 HTML没有被故意索引,因为它是LONGTEXT类型
我还想补充一点,有时在工作台上运行查询时,它可以按预期的那样很快地答复,但是执行它通常需要50英寸左右的时间。...我对此感到有些困惑
答案 0 :(得分:0)
我不知道您在这里使用了什么实际索引,但这可能是可以改善查询性能的索引:
CREATE INDEX idx ON MyTable (env, HTML, id);
这将使MySQL使用两个字段来有效地过滤WHERE
子句中的匹配项。并且此索引还覆盖了id
,您可以选择该id
并将其用于排序。请注意,如果CREATE INDEX idx ON MyTable (env, HTML);
是主键,并且您正在使用InnoDB引擎,则可以将索引简化为以下内容:
public static class Example extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
JSONObject postdata = new JSONObject();
try {
AppUtill.getJsonWithHTTPPost(context, 1, new ServiceCallBack() {
@Override
public void serviceCallback(int id, JSONObject jsonResult) {
try {
if (jsonResult.getString("Status").equalsIgnoreCase("Success")) {
JSONObject jsonObject = jsonResult.getJSONObject("Data");
String apptime = jsonObject.optString("apptime");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentDateandTime = sdf.format(new Date());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
Date date1 = dateFormat.parse(apptime);
Date date2 = dateFormat.parse(currentDateandTime);
calendar1.setTime(date1);
calendar2.setTime(date2);
long diff = date1.getTime() - date2.getTime();
long seconds = diff / 1000;
calendar2.add(Calendar.SECOND, (int) seconds);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
new_date = "FoodHIT" + sdf1.format(calendar2.getTime());
new_date = encryptStringmd5(new_date);
System.out.println("Compare Result : " + seconds);
System.out.println("AppTime: " + jsonObject.optString("apptime"));
System.out.println("token : " + new_date);
Prefs.putString("security_token", new_date);
Log.e("NNNNNNNNNNNNNNNN",""+ new_date);
} else {
Toast.makeText(context, jsonResult.getString("Message"), Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}, AppUtill.getapptime, postdata);
} catch (Exception e) {
e.printStackTrace();
}
return new_date;
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
new_date=result;
}
}