gpt4 book ai didi

mysql - MySQL的SELECT WHERE是如何进行整数比较的?

转载 作者:行者123 更新时间:2023-11-29 01:39:05 26 4
gpt4 key购买 nike

假设我有一个 MySQL 查询,例如

SELECT `id` FROM `posts` WHERE `views` >= 100

这将如何由 MySQL 完成?它是否从数据库中选择每个值,检查查看次数是否大于 100,如果是,则将其添加到结果中?

如果这是在 Java 中对 HashMap 的查询,它看起来像这样

Map<String, Integer> views = new HashMap<String, Integer>();
List<String> results = new ArrayList<String>();

for(String id : views.keys()){
if(views.get(id) >= 100){
results.add(id);
}
}

return results;

但是如果表格有数万或数十万行,那似乎不是很有效。 SELECT WHERE 如何进行整数比较?如果它从数据库中获取每个值并根据 WHERE 条件对其进行检查,它是否会占用大量资源,是否应该在生产环境中使用?

最佳答案

给定一个没有索引的表,扫描和测试每一行正是 MySQL 所做的。这就是索引对性能至关重要的原因。

有了索引,MySQL 会遍历它并找到 100 所在的位置。坐下,然后从该点开始读取行。这适用于 < 之类的边界, >BETWEEN运营商。

一个没有索引的表应该被认为是一个随机的数据列表,没有固有的顺序。索引表按一个或多个列排序,因此检索很容易。考虑在电话簿中查找所有姓氏为“Thompson”的人,而不是在纸片上写满名字的盒子。在一种情况下,您可以翻到正确的页面并从那里开始阅读,而在另一种情况下,您必须阅读框中的每个名字。

如果您想知道 MySQL 将如何处理您的查询,请执行以下操作:

EXPLAIN SELECT id FROM posts WHERE views >= 100

如果您看到“表扫描”,这意味着它必须测试每一行并且应该添加一个索引。

关于mysql - MySQL的SELECT WHERE是如何进行整数比较的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com