这是查询:
SELECT name, SUM( `count` ) AS Total
FROM `identdb`
WHERE MBRCONTAINS( GEOMFROMTEXT( 'LineString(34.4 -119.9, 34.5 -119.8)' ) , latlng )
AND MOD( DAYOFYEAR( CURDATE( ) ) - DAYOFYEAR( `date` ) +365, 365 ) <=14
OR MOD( DAYOFYEAR( `date` ) - DAYOFYEAR( CURDATE( ) ) +365, 365 ) <=14
AND MBRCONTAINS( GEOMFROMTEXT( 'LineString(34.4 -119.9, 34.5 -119.8)' ) , latlng )
GROUP BY `name`
它基本上可以找到任何行,其中一年中的某一天是今天的正负14,以及latlng空间列在矩形中的行.
这是我的数据库的样子:
# Column Type Collation
1 name varchar(66) utf8_general_ci
2 count tinyint(3)
3 date date
4 latlng geometry
5 lat1 varchar(15) latin1_swedish_ci
6 long1 varchar(15) latin1_swedish_ci
Keyname Type Unique Packed Column Cardinality Collation Null Comment
PRIMARY BTREE Yes No name 0 A
count 0 A
date 0 A
lat1 0 A
long1 6976936 A
sp_index SPATIAL No No latlng (32) 0 A
有700万条记录,查询大约需要7秒钟.我不知道如何提高速度,提前谢谢!
说明:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE identdb ALL sp_index NULL NULL NULL 6976936 Using where; Using temporary; Using filesort
更新的查询说明:
我相信MBRCONTAINS创建一个矩形,我可以比较latlng空间点是否在内部.日期部分是找到白昼或 – 14天.它使用模块化算法,因此它不会在新的一年里搞乱.由于使用了OR,我不得不将MBRCONTAINS部分放入两次.
我对查询的需求是找到所有具有一年中某一天或 – 14天的名称,并且在给定的纬度/长度对中,然后总计每个的计数.
我对这些东西很愚蠢,所以如果我做一些愚蠢的话,请纠正我.多谢你们!