Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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从主键选择,从外键选择大O_Mysql_Database_Performance - Fatal编程技术网

mySQL从主键选择,从外键选择大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与数据“聚集”,因此当其

我还没有从外键和主键中找到任何关于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
与数据“聚集”,因此当
其中PRIMARY\u KEY=some\u value
向下钻取BTree到叶节点时,它会在那里找到整个记录

次要索引(我假设
外键
已被索引)也是一个BTree,但叶节点包含它找到的行的
主键
的副本。然后执行第二次查找以获取数据(包括
某些列

基于这种逻辑,一个辅助键查找所需的时间大约是PK查找所需时间的两倍。然而,由于在任何
选择
中都会有很多其他内容,因此您很少测量2x

还有其他问题

如果
some_column
是PK中的一列,那么您的第二个
SELECT
与第一个类似

如果您有
索引(外键,某些列)
,那么这将更快,因为任务将在向下钻取此键的BTree后完成。也就是说,不需要第二个带有PK的探针

如果
中的测试不涉及索引,则执行“表格扫描”。对于1000行的表,查询将花费1000倍的时间。(事实上,由于开销的原因,两者的差别并不大。)无论如何,可以在几毫秒内扫描1000行,因此“微小”表上缺少索引通常不是什么大问题

这只是索引和优化过程中几十件,也许几百件微妙事情中的一些花边新闻

更多的,但不是所有的花边新闻被发现