Mysql减法性能低下

标签 mysql select

我正在我的应用程序中进行以下查询,以检索行:

SELECT 
    title, 
    SUBSTRING(description, 1, 200) AS s_description, 
    refresh_time, (UNIX_TIMESTAMP()-refresh_time) AS since, 
    state, state_friendly, 
    city, city_friendly, 
    category, category_friendly, 
    basename, COUNT(ad_id) AS im_ocur
FROM `ad` `a` 
JOIN `state` ON state_id = ad_state_id 
JOIN `city` ON city_id = ad_city_id 
JOIN `category` ON category_id = ad_category_id 
LEFT JOIN `ad_image` ON ad_image_ad_id = ad_id 
WHERE (ad_country_id = 195) 
GROUP BY `ad_id` 
ORDER BY `refresh_time` DESC, front DESC 
LIMIT 20

我已经在很多情况下对其进行了测试,但是当提到一个有很多行的城市时,它的性能有所下降。经过几次更改后,我意识到问题是由于“(UNIX_TIMESTAMP()-refresh_time)”表达式引起的,因此 Mysql 引擎似乎在行限制设置为 20 之前进行了算术运算。

我的替代解决方案是使用 PHP 对数据进行后处理,但我更喜欢完整的 mysql 方式。

这可能吗?

最佳答案

我认为这不是减法,而是为每一行调用 UNIX_TIMESTAMP()(虽然我可能错了)。

如果您认为减法是性能低下的原因,您可以随时将其移至外部查询。

SELECT
  title, 
  s_description, 
  refresh_time, (UNIX_TIMESTAMP()-refresh_time) AS since,
  state, state_friendly, 
  city, city_friendly, 
  category, category_friendly, 
  basename, im_ocur
FROM (
  SELECT 
    title, 
    SUBSTRING(description, 1, 200) AS s_description, 
    refresh_time,
    state, state_friendly, 
    city, city_friendly, 
    category, category_friendly, 
    basename, COUNT(ad_id) AS im_ocur
  FROM `ad` `a` 
  JOIN `state` ON state_id = ad_state_id 
  JOIN `city` ON city_id = ad_city_id 
  JOIN `category` ON category_id = ad_category_id 
  LEFT JOIN `ad_image` ON ad_image_ad_id = ad_id 
  WHERE (ad_country_id = 195) 
  GROUP BY `ad_id` 
  ORDER BY `refresh_time` DESC, front DESC 
  LIMIT 20
) AS sq

关于Mysql减法性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295272/

相关文章:

cmd 粘贴时出现 MYSQL 错误

MySQL查询——基于权重的搜索引擎

javascript - 修改 sphider search.php 文件并帮助我

PHP从mysql日期时间导出Excel问题

MySQL查询查找不存在且具有多个重复值的记录

php - 计算有多少客户有 1 项服务,有多少客户有 2 项服务

javascript - 在没有轮询器的情况下基于 MySQL 数据库创建 Node.js 仪表板

sql - Oracle 选择今天之间的日期

mysql join or select where tablename1.col1 = tablename2.col1

sql - PostgreSQL - 选择条件满足的不同(列1,列2)