我想速MySQL查询,基本上检索网页的数据以下模式下

select
 my_field_A,
 my_field_B
where
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

该领域 time_id 是MySQL索引,但是,查询的行为,如果整个数据库是在阅读每个查询(检索一对夫妇的线已经很慢)。我不是专家在MySQL.有人能猜到我在做什么错的?

有帮助吗?

解决方案

确保有一个索引(B树)在time_id,这应该是有效范围内查询。还要确保time_id是在适当的时间格式。

如果你真的想要了解什么mysql是这样做可以增加关键词'解释'前方的查询,并运行它在你的mysql client.这将显示一些信息是什么mysql是做什么样的扫描执行。

http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

其他提示

由于可能有很多 time_id 属于这些标准, MySQL 可能会认为全表扫描更好。

尝试强制索引:

SELECT
 my_field_A,
 my_field_B
FROM mytable FORCE INDEX (index_name_on_time_id)
WHERE
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

你需要更低的范围吗?有没有比1901年更早的参赛作品? time_id列是如何生成的?如果每个新条目都添加到DB中时time_id总是更大,您可能需要考虑查找最接近2009-01-16条目的ID,然后按ID选择

select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?

如果情况并非如此,请尝试检查MySQL 5.1中提供的分区并按年分解表格,这样可以大大提高速度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top