Mysql 偏移复杂性InnoDB
我对InnoDB中的Mysql 偏移复杂性InnoDB,mysql,time-complexity,Mysql,Time Complexity,我对InnoDB中的OFFSET的复杂性有疑问。我知道这主要适用于线性复杂度,但如果我在字段上有索引 例如: CREATE TABLE `person_rand` ( `p_id` int(6) NOT NULL PRIMARY KEY, `town_id` int NOT NULL, KEY p_town (town_id), CONSTRAINT `fk_perrand` FOREIGN KEY (p_id) REFERENCES person_data(p_id) on updat
OFFSET
的复杂性有疑问。我知道这主要适用于线性复杂度,但如果我在字段上有索引
例如:
CREATE TABLE `person_rand` (
`p_id` int(6) NOT NULL PRIMARY KEY,
`town_id` int NOT NULL,
KEY p_town (town_id),
CONSTRAINT `fk_perrand` FOREIGN KEY (p_id) REFERENCES person_data(p_id) on update cascade on delete cascade
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
和查询
SELECT p_id FROM person_rand WHERE town_id=69 LIMIT 1 OFFSET 666
那么执行这个查询的速度有多快?在固定的时间里,它不会工作吗
EXPLAIN SELECT p_id FROM person_rand WHERE town_id=69 LIMIT 1 OFFSET 666
每次都显示另一行数
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE person_rand ref p_town p_town 4 const 950 Using index
EXPLAIN中显示的行数只是基于InnoDB表统计信息的估计数。不要把它当作一个精确的数字
town_id=69
的索引搜索具有复杂性O(log2n),因为它正在搜索一个B-树
通常,将限制
与偏移一起使用具有线性复杂性。在您的示例中,它必须生成667行的结果集,然后才能跳过666的偏移量以获得偏移量后面的1行
您可以阅读更多关于MySQL如何使用
LIMIT
优化查询的信息:预先编写一个EXPLAIN
并亲自查看?我已经编辑了这篇文章。每次它向我显示另一行数。EXPLAIN从person\u rand中选择p\u id,其中town\u id=69 LIMIT 1
在固定时间内也不起作用,但我有一个键。。