mySQL从主键选择,从外键选择大O
我还没有从外键和主键中找到任何关于mySQL select查询的大O的真实数据。以下是两个示例查询:mySQL从主键选择,从外键选择大O,mysql,database,performance,Mysql,Database,Performance,我还没有从外键和主键中找到任何关于mySQL select查询的大O的真实数据。以下是两个示例查询: SELECT some_column FROM some_table WHERE primary_key = some_value SELECT some_column FROM some_table WHERE foreign_key = some_value 这两个问题中最大的问题是什么 提前谢谢你的帮助 假设该表为ENGINE=InnoDB PRIMARY KEY与数据“聚集”,因此当其
SELECT some_column FROM some_table WHERE primary_key = some_value
SELECT some_column FROM some_table WHERE foreign_key = some_value
这两个问题中最大的问题是什么
提前谢谢你的帮助 假设该表为
ENGINE=InnoDB
PRIMARY KEY
与数据“聚集”,因此当其中PRIMARY\u KEY=some\u value
向下钻取BTree到叶节点时,它会在那里找到整个记录
次要索引(我假设外键
已被索引)也是一个BTree,但叶节点包含它找到的行的主键
的副本。然后执行第二次查找以获取数据(包括某些列
)
基于这种逻辑,一个辅助键查找所需的时间大约是PK查找所需时间的两倍。然而,由于在任何选择中都会有很多其他内容,因此您很少测量2x
还有其他问题
如果some_column
是PK中的一列,那么您的第二个SELECT
与第一个类似
如果您有索引(外键,某些列)
,那么这将更快,因为任务将在向下钻取此键的BTree后完成。也就是说,不需要第二个带有PK的探针
如果中的测试不涉及索引,则执行“表格扫描”。对于1000行的表,查询将花费1000倍的时间。(事实上,由于开销的原因,两者的差别并不大。)无论如何,可以在几毫秒内扫描1000行,因此“微小”表上缺少索引通常不是什么大问题
这只是索引和优化过程中几十件,也许几百件微妙事情中的一些花边新闻
更多的,但不是所有的花边新闻被发现