mysql id顺序为什么是乱的_MySQL:为什么按照ID按顺序比其他列的顺序慢?

我使用

MySQL版本5.5.14从500万行的表中运行以下查询QUERY 1:

SELECT P.ID, P.Type, P.Name, P.cty

, X(P.latlng) as 'lat', Y(P.latlng) as 'lng'

, P.cur, P.ak, P.tn, P.St, P.Tm, P.flA, P.ldA, P.flN

, P.lv, P.bd, P.bt, P.nb

, P.ak * E.usD as 'usP'

FROM PIG P

INNER JOIN EEL E

ON E.cur = P.cur

WHERE act='1'

AND flA >= '1615'

AND ldA >= '0'

AND yr >= (YEAR(NOW()) - 100)

AND lv >= '0'

AND bd >= '3'

AND bt >= '2'

AND nb <= '5'

AND cDate >= NOW()

AND MBRContains(LineString( Point(39.9097, -2.1973)

, Point(65.5130, 41.7480)

), latlng)

AND Type = 'g'

AND tn = 'l'

AND St + Tm - YEAR(NOW()) >= '30'

HAVING usP BETWEEN 300/2 AND 300

ORDER BY ak

LIMIT 100;

使用索引(Type,tn,act,flA),我可以在800ms内获得结果.在QUERY 2中,我将ORDER BY子句更改为lv,我也可以在类似的时间内获取结果.在QUERY 3中,我将ORDER BY子句更改为ID,查询时间平均减慢了20秒,平均10次.

运行EXPLAIN SELECT语句生成完全相同的查询执行计划:

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: P

type: range

possible_keys: Index

key: Index

key_len: 6

ref: NULL

rows: 132478

Extra: Using where; Using filesort

*************************** 2. row ***************************

id: 1

select_type: SIMPLE

table: E

type: eq_ref

possible_keys: PRIMARY

key: PRIMARY

key_len: 3

ref: BS.P.cur

rows: 1

Extra:

我的问题是:为什么按照QUERY 3中的ID进行排序与​​其他文件运行相当慢?

部分表定义是这样的:

CREATE TABLE `PIG` (

`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,

`lv` smallint(3) unsigned NOT NULL DEFAULT '0',

`ak` int(10) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`ID`),

KEY `id_ca` (`cty`,`ak`),

KEY `Index` (`Type`, `tn`, `act`, `flA`),

) ENGINE=MyISAM AUTO_INCREMENT=5000001 DEFAULT CHARSET=latin1

CREATE TABLE `EEL` (

`cur` char(3) NOT NULL,

`usD` decimal(11,10) NOT NULL,

PRIMARY KEY (`cur`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1

更新:对各种ORDER BYs选项进行了广泛的测试后,我已经确认,恰好是主键的ID列是导致查询时间慢的唯一的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值