mysql 加快查询_mysql – 如何加快我的SQL查询?

这是查询:

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天的名称,并且在给定的纬度/长度对中,然后总计每个的计数.

我对这些东西很愚蠢,所以如果我做一些愚蠢的话,请纠正我.多谢你们!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值