mysql - 无限制获取最后记录的任何更好的选择

标签 mysql query-optimization

我有以下问题

DECLARE lv_Duration INT;    
    SET @lv_Duration = 0;    

     SELECT @lv_Duration := TIMESTAMPDIFF(SECOND,  changedon,NOW()) 
     FROM  `transactionhistory` 
     WHERE transaction_Id = TRIM(_transaction)        
     ORDER BY tsh_id DESC
     LIMIT 1; 

自从上次输入 transaction_Id 字段以来,我得到了时间。但是在相对中等大小的表中它花费了 0.25 秒。我的主要自动增量字段是 tsh_id。我在 transaction_Id 字段上有索引。我认为订购和记录最后一条记录可能会对性能产生影响。那么还有其他选择吗?

最佳答案

来自ORDER BY optimisation link由 McAdam331 提供 我相信您的查询符合以下模式:

  SELECT * 
    FROM t1
   WHERE key_part1 = constant
ORDER BY key_part2;

(transaction_Id,tsh_id) 上的复合索引应该可以加快速度。

我认为没有比 LIMIT 更快的方法来获取最新记录。

关于mysql - 无限制获取最后记录的任何更好的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30530501/

相关文章:

mysql - 如何使用命令行更改 MySQL 表的外键

mysql - shell脚本将数据解析为变量然后更新数据库

sql - Postgresql ORDER BY - 选择正确的索引

mysql - 按日期顺序排序时,“使用临时”会减慢查询速度

php - 从数据库中获取记录时的动态行跨度

java - 导出 JAR 文件但需要 MySQL 驱动程序

sql-server - 优化select的执行

mysql - 缓慢的 MySQL 查询

MySQL View 优化与子查询

MySQL 显然无法区分字符串