我有这张桌子:
CREATE TABLE `property_ads_history` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `property_ad_id` int(10) unsigned NOT NULL, `advertiser_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `agency_reference_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `average_sale_price` double(8,2) NOT NULL DEFAULT '-1.00', `bathrooms` double(8,2) NOT NULL DEFAULT '-1.00', `bedrooms` double(8,2) NOT NULL DEFAULT '-1.00', `carports` double(8,2) NOT NULL DEFAULT '-1.00', `DELETE_country` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `created_reason` enum('Geocoded','Sanitized Parking','Sanitized Representation','Sanitized Address','Scraped','URL Inserted','QA Sanitized Address','QA Sanitized Representation','QA Sanitized Parkings') COLLATE utf8_unicode_ci DEFAULT NULL, `description` longtext COLLATE utf8_unicode_ci NOT NULL, `ensuite_bathrooms` double(8,2) NOT NULL DEFAULT '-1.00', `DELETE_ad_expired_at` datetime NOT NULL, `floor_area` double(8,2) NOT NULL DEFAULT '-1.00', `formatted_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `garages` double(8,2) NOT NULL DEFAULT '-1.00', `geocode_status` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `is_represented` tinyint(1) DEFAULT NULL, `land_area` double(8,2) NOT NULL DEFAULT '-1.00', `latitude` double(10,6) NOT NULL, `location_id` int(10) unsigned DEFAULT NULL, `longitude` double(10,6) NOT NULL, `off_street_parkings` double(8,2) NOT NULL DEFAULT '-1.00', `official_property_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `page_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `parking` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `posted_at` datetime NOT NULL, `posted_at_string` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `postal_code` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `price` double(10,2) NOT NULL DEFAULT '-1.00', `primary_image` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `DELETE_property_ad_created_at` datetime NOT NULL, `property_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `rateable_value` double(10,2) NOT NULL DEFAULT '-1.00', `recent_sale_1` double(10,2) NOT NULL DEFAULT '-1.00', `recent_sale_2` double(10,2) NOT NULL DEFAULT '-1.00', `recent_sale_3` double(10,2) NOT NULL DEFAULT '-1.00', `reviewer_comments` longtext COLLATE utf8_unicode_ci NOT NULL, `route` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `source_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `street_number` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `user_id` int(10) unsigned DEFAULT NULL, `user_provided_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `unique_index` (`created_at`,`created_reason`,`source_id`), KEY `property_ads_history_property_ad_id_foreign` (`property_ad_id`), KEY `property_ads_history_location_id_foreign` (`location_id`), KEY `created_reason` (`created_reason`) );
这是我的SQL查询:
SELECT * FROM `property_ads_history` `t1`
WHERE `t1`.`created_at` >= '2016-04-13 00:00:00'
AND `t1`.`created_reason` = 'Scraped'
AND (`t1`.`price` > -1 OR `t1`.`price` <> 999999.99)
AND (
SELECT `t2`.`price` FROM `property_ads_history` `t2`
WHERE `t2`.`property_ad_id` = `t1`.`property_ad_id`
AND `t2`.`created_at` < `t1`.`created_at`
AND (`t2`.`price` > -1 OR `t2`.`price` <> 999999.99) ORDER BY
DATE(`t2`.`created_at`) DESC LIMIT 1
) <> `t1`.`price` GROUP BY `t1`.`property_ad_id`;
我想要的查询是:
>
我希望获得符合某些条件的记录,特别是created_at
字段在最近24小时内的记录
我需要获得紧接在#1中的记录之前的记录
将#1中的结果进一步过滤到其价格列在记录的历史记录中具有不同值(而不是-1)的记录
我面临的问题是查询太慢了。我有一百万张唱片。执行查询大约需要2分钟。我猜GROUP BY会使查询变慢。我想我需要做一个综合指数,但我不知道怎么做。
解释结果:
null
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | PRIMARY | t1 | ref | unique_index,created_reason | created_reason | 2 | const | 590030 | Using where; Using temporary; Using filesort
2 | DEPENDENT SUBQUERY | t2 | ref | unique_index,property_ads_history_property_ad_id_foreign | property_ads_history_property_ad_id_foreign | 4 | reis_real_estate.t1.property_ad_id | 7 | Using where; Using filesortnull
null
而不是使用子查询,使用联接,它将减少查询时间。下面的查询可能会对您有所帮助。
select t1.*, t2.price
from `property_ads_history` AS `t1`
INNER JOIN `property_ads_history` As `t2`
where `t1`.`created_at` >= '2016-04-13 00:00:00'
AND `t1`.`created_reason` = 'Scraped'
AND (`t1`.`price` > -1 OR `t1`.`price` <> 999999.99 )
AND `t2`.`created_at` < `t1`.`created_at`
AND (`t2`.`price` > -1 OR `t2`.`price` <> 999999.99 )
ORDER BY DATE(`t2`.`created_at`) DESC
GROUP BY `t1`.`property_ad_id`;
此外,在列上放置索引,这也将减少查询的时间。
我有大约20万张唱片要储存。我已经实现了Java客户端来从hazelcast地图中搜索记录。我没有在预期时间内得到搜索结果。 一旦我做Hazelcast喜欢或在查询,它需要最少400到500毫秒。 是否可以更改服务器端和客户端配置以提高吞吐量? 我用键值将JavaBean信息存储在Map中。我还在一个字段上创建了索引。还实现了身份序列化机制。 服务器端配置(使用XML文件设置服务器): 客户端代码
我的问题类似于SQL选择组查询。但是架构发生了变化,我想要不同的结果,如下所述。给定链接的解决方案没有给我正确的解决方案。您可以使用SQL小提琴来解决这个问题。 下面是我的桌子 表1 现在,我想显示每个产品的两个最低金额,如果金额相同,那么任何人都按照升序排列... 所以我想构建单个SQL查询,它给我的结果如下。 请帮我建立这样的查询。
问题内容: 怀疑在VBA ADO和Sql查询中… 我有2张纸,即adodc1,adodc2(在一本工作簿中) 在adodc1中具有“名称”,“部门”列,有时其具有“ Sect”列 在adodc2中具有“名称”,“部门”,“宗派”列 我想要的是当我运行Query..Vba时需要检查adodc1是否具有Sect列。 要返回为空值.. 下面的代码取自“”,根据我的需要进行了更改 它将执行的工作是来自两张
编写一个查询以显示staffid、费用代码、专科id、专科名称、会诊日期、患者号和到期日将使用会诊日期+21计算 STAFFID NOT NULL CHAR(2) FIRSTNAME VARCHAR2(20) LASTNAME VARCHAR2(20) 角色VARCHAR2(15) 性别CHAR(1) 日期连接日期 DATELEFT DATE SQL>描述staffspeciality错误: OR
问题内容: 好吧,我可能也已在较早之前发布了此内容,但到目前为止仍找不到答案,因此请帮助我解决这个问题。 我的数据库结构: ATT (表) Act_ID(PK) Assigned_To_ID(FK,请参阅) Project_ID(FK,请参阅) Product_ID(FK,请参阅) 状态(可以是) 产品表 产品编号(PK) 产品名称 项目表 Project_ID(PK) 项目名 员工表 Emp_I
问题内容: 考虑这种情况… 我有1000美元,我想购买上面列出的东西。 我想花全部钱 因此,我需要一个查询,该查询将给出所有产品中多少单位的价格为1000 $ 有什么帮助吗? 问题答案: 这是硬编码的,几乎没有灵活性。我的系统花了2分钟才能运行。但是可能会有所帮助,如果没有,抱歉。fnGenerate_Numbers是一个表函数,它返回参数范围内的整数。 做到这一点的方法。