Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的快速页面检索,索引使用情况?_Mysql_Performance_Indexing_Paging - Fatal编程技术网

MySQL中的快速页面检索,索引使用情况?

MySQL中的快速页面检索,索引使用情况?,mysql,performance,indexing,paging,Mysql,Performance,Indexing,Paging,我想加速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') 选择 我的领域, 我的领域 哪里 时间id>=UNIX时间戳('1901-01-01 00:00:00'),以及 时间id=UNIX时间戳(

我想加速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')
选择
我的领域,
我的领域
哪里
时间id>=UNIX时间戳('1901-01-01 00:00:00'),以及
时间id

字段
time\u id
是一个MySQL索引,但是,查询的行为就像在每次查询时读取整个数据库一样(检索几行已经相当慢)。我不是MySQL方面的专家。有人能猜出我做错了什么吗?

因为可能有很多时间都在这些标准之下,
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')
选择
我的领域,
我的领域
从mytable强制索引(索引名称在时间id上)
哪里
时间id>=UNIX时间戳('1901-01-01 00:00:00'),以及
时间id
由于可能有很多
时间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')
选择
我的领域,
我的领域
从mytable强制索引(索引名称在时间id上)
哪里
时间id>=UNIX时间戳('1901-01-01 00:00:00'),以及
时间id
确保您在时间id上有一个索引(B-树),这对于范围查询应该是有效的。还要确保time_id采用适当的时间格式

如果您真的想了解mysql正在做什么,您可以在查询前面添加关键字“explain”,并在mysql客户端中运行它。这将显示一些关于mysql正在做什么以及执行何种扫描的信息


确保您在时间id上有一个索引(B-树),这对于范围查询应该是有效的。还要确保time_id采用适当的时间格式

如果您真的想了解mysql正在做什么,您可以在查询前面添加关键字“explain”,并在mysql客户端中运行它。这将显示一些关于mysql正在做什么以及执行何种扫描的信息


您需要较低的量程吗?有1901年以前的作品吗? 时间id列是如何生成的?如果在每一个新条目被添加到DB中,TimeSyid总是较大的,那么您可能需要考虑找到最接近于No.01-16的条目ID,然后通过ID

进行选择。
select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?
选择我的字段A、我的字段B
从…起
空白表
哪里

id您需要较低的范围吗?有1901年以前的作品吗? 时间id列是如何生成的?如果在每一个新条目被添加到DB中,TimeSyid总是较大的,那么您可能需要考虑找到最接近于No.01-16的条目ID,然后通过ID

进行选择。
select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?
选择我的字段A、我的字段B
从…起
空白表
哪里

id“time\u id应该是一个MySQL索引”,但你确定它是吗显示[表]中的索引““time_id应该是MySQL索引”,但您确定它是吗?”显示[表]中的索引'