mysql索引不用于大表

时间:2013-09-22 05:43:55

标签: mysql

我有一张包含4000万条记录的表格。

当我提出请求时:

SELECT COUNT(*) 
FROM shares
WHERE id > 36725307
AND our_result = 'N'

使用our_result上的索引。

在使用不同值的声明中:

SELECT COUNT(*)
FROM shares
WHERE id > 36725307
AND our_result = 'Y'

未使用索引。

  

的my.cnf

key_buffer_size         = 900M
join_buffer_size        = 512M
query_cache_size        = 128M
thread_cache_size       = 8
query_cache_limit       = 64M
tmp_table_size          = 512M
max_heap_table_size     = 128M
key_buffer_size         = 256M
key_cache_division_limit= 70
max_heap_table_size     = 256M
sort_buffer_size        = 128M  
max_tmp_tables          = 64
table_cache             = 2048
read_rnd_buffer_size    = 128M

字段our_works = Y的记录:3700万 字段our_works = N的记录:200万

为什么索引不在第二个查询中使用?

2 个答案:

答案 0 :(得分:1)

低基数指数是坏消息。基数表示列中唯一值的数量。如果数百万行都具有相同的值,则索引几乎没用。

选中此项以获取参考:http://www.lullabot.com/blog/article/slow-queries-check-cardinality-your-mysql-indexes

运行EXPLAIN SELECT COUNT( * ) FROM shares WHERE id >36725307 AND our_result = 'Y'将向您展示mysql如何使用(或不使用)索引。

答案 1 :(得分:0)

我找到了原因。 由于内存超过为他保留的位置,因此已对索引执行了搜索。