我使用MySQL,太迟了,直到我意识到查询需要很长时间才能响应需要的列作为索引。
我理解索引工作的方式,但我想知道索引是否可以以COUNT(*)或COUNT(col1)(其中col1被索引)的方式实现,将与执行'WHERE COL = 007 '? 我问这是因为在我的应用程序中,我经常需要进行计数查询。对于更快的操作流程来说,减少响应非常重要。为什么索引不能用于计数(*)?
回答
你说你理解索引的工作方式。但我认为这也是一个聚合函数如何工作的问题。
比方说你犯了一个
SELECT count(col) FROM table;
它有什么作用?也许它呈现从该表中每一个山坳到计数和计数做了
counter++;
地方。这是一个相当快的操作。
您数查询的速度取决于各行的速度有多快,可以呈现给计数功能。 col上的索引不会影响速度,因为无论如何都必须扫描表的每一行。索引只是查找某些行比完整表扫描更快的一种手段。
在另一方面,像
快速查询快,因为
SELECT col FROM table WHERE col="rare value";
快为好。
我希望这对你有意义。否则,为什么不给我们提供更多的细节,我们尝试和皮条客一个真实的查询?
'COUNT(*)'可以通过* O(1)*从表格元数据中进行评估。该表知道它有多少行。它不需要扫描。或者一个索引。 – EJP
也许你的MySQL版本。我使用5.6.35这不是太旧。我得到'SELECT count(*)FROM countTest; + ---------- + | count(*)| + ---------- + | 500000 | + ---------- + 1行(0,12秒)'这似乎不是O(1) – nCessity
https://dev.mysql.com/doc/internals /en/optimizer-group-by-related-conditions.html说:“如果表处理程序有一个快速行计数可用,然后查询 'SELECT COUNT(*)FROM Table1;' 获得计数没有遍历所有的行,这对MyISAM表是正确的,但对InnoDB表不是这样。“ – nCessity
- 1. OpenGL - 为什么GL_ELEMENT_ARRAY_BUFFER用于索引?
- 2. SQL为什么不使用PK索引?
- 3. 为什么MySQL不使用索引?
- 4. 为什么不使用我的索引?
- 5. 什么哈希函数用于网络搜索引擎索引
- 6. 为什么不能用索引列表索引一个python列表?
- 7. T-trees:为什么它们不用于磁盘索引?
- 8. Python - 为什么零索引不适用于字符串?
- 9. 为什么不能列表解包用于索引第二个列表?
- 10. 为什么我的for循环不能用于索引我的JSON URL?
- 11. 为什么此代码不能用于从类引用常量?
- 12. 为什么方法引用不能应用于子类?
- 13. 为什么NSTextView不能用于弱引用?
- 14. 为什么用这种方式计算二分搜索索引?
- 15. 为什么这个结果不能仅使用索引解决?
- 16. MySQL不使用可能的索引 - 为什么?
- 17. 为什么我不能引用System.ComponentModel.DataAnnotations?
- 18. 为什么我不能引用attr`android:popupEnterTransition`?
- 19. 为什么使用变量调用数组索引不好?
- 20. 为什么disable_with不能用于rails form_for?
- 21. 为什么SqlTrackingService不能用于WF 4.0?
- 22. 为什么IO#不能用于TCPSocket?
- 23. 为什么ngInfiniteScroll不能用于表格?
- 24. 为什么UITableViewAutomaticDimension不能用于sectionFooterHeight?
- 25. 'IndexIgnore *'为什么不能用于'DirectoryMatch'?
- 26. 为什么Tabindex不能用于Firefox?
- 27. 为什么SO_REUSEADDR不能用于multiprocessing.Listener?
- 28. 为什么最后不能扩展到适用于数组和引用对象?
- 29. 为什么计数函数不适用于Spark中的mapvalues?
- 30. 为什么mongodump不备份索引?
你的查询是什么?在选择部分有一个“count(*)”不应该阻止使用索引。 – CptMisery
你可能想看看这个:http://stackoverflow.com/questions/286039/get-record-counts-for-all-tables-in-mysql-database –
MySQL不会在count或sum目标上使用索引列。它必须迭代每行以提供结果。 –