MySQL选择查询在使用limit和offset参数时不工作
我在我的Windows Vista系统上运行MySQL 5.1。这里提到的表使用的是MyISAM存储引擎,大约有1000万行数据。这个表用来存储用户在网站上发布的文本消息。
我尝试在这个表上运行以下查询,
query = "select id, text from messages order by id limit %d offset %d" %(limit, offset)
其中限制(limit)设置为一个固定值(在这个例子中是20000),而偏移量(offset)则每次增加20000。
当偏移量等于240000时,这个查询进入了一个无限循环。就是这个特定的值,而不是其他任何值。
我把这个查询单独放到一个脚本里运行,结果还是一样。然后我直接运行最后一个查询(偏移量为240000),结果却正常!
接着我在MySQL客户端直接执行相同的查询,以确保错误不是出在Python的数据库访问模块上。所有的查询都返回了结果,除了那个偏移量为240000的查询。
然后我查看了MySQL服务器的日志,发现了以下内容。
[ERROR] C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld: Sort aborted
这可能意味着当我因为沮丧停止了Python进程时,mysqld进程正在“排序”某些东西。当我查看my.ini文件时,发现里面有很多MAX_*的选项。我目前正在尝试调整这些选项,但在此期间先把这个信息分享出来。
任何帮助都非常感谢!