在大型MySql表

时间:2016-06-08 18:14:04

标签: mysql indexing

我在公司表上拥有6300万条记录公司,城市和州的独立索引,但也有一个名为Company_NA的复合索引,由公司,城市,州组成。

出于某些原因,我

Select Count(*) from Companies group by COMPANY,CITY,STATE 

说明不选择任何指数

如果我这样做

Select Count(*) from Companies Force Index (COMPANY_NA) group by COMPANY,CITY,STATE

它自然会使用该密钥,但查询需要很长时间,我会在5分钟后停止它。

是否有更好的方法来索引,分析要检查的索引或事物,以便了解为什么这么慢(除非这对于给定的表大小来说是好的)

值得拥有的是51个独特国家,7k独特城市。我无法获得公司的独特信息,因为我在运营时

Select count(*) from Companies group by Company

15分钟后我不得不终止查询。我确实检查了上述查询的解释,并使用公司索引作为关键:

  • 选择类型:简单
  • 表:公司
  • 类型:索引
  • 可能的键:''
  • 重点:公司
  • Key Len:153(不知道为什么,varchar是50)
  • 参考:''
  • 行:6235080
  • 额外:使用索引

更新:

我创建了一个重复的空表,然后从中删除了无关的字段和所有索引,然后添加了三个索引:

  • 独特:公司,地址,城市,州
  • UniqueCity:公司,城市,州
  • 公司:公司

我也跑了

Alter Table Company Auto_Increment=1

由于我的自动增量因持续工作而超过10,000,000。

继续测试

1 个答案:

答案 0 :(得分:0)

哎哟!请勿重置AUTO_INCREMENT

您是否同时拥有UNIQUE(Company,Address,City,State)UNIQUE(Company,City,State)?第一个不需要UNIQUE

你有INDEX(Company)吗?这是不必要的,因为你有两个其他索引与该列。

您确定在同一个城市中不能有两家同名的公司吗?

Select count(*) from Companies group by Company毫无意义。您是否要计算每家公司出现的次数:Select Company, count(*) from Companies group by Company?或者您的意思是计算行数:Select count(*) from Companies

无论您打算如何运行,都需要花费一些时间来浏览表格或索引中的6300条记录。

是表InnoDB吗?

请提供SHOW CREATE TABLE

innodb_buffer_pool_size的价值是多少?它应设置为可用 RAM的大约70%。

如果有63M行,但AUTO_INCREMENT值仅为10M左右,则严重错误。

请同时提供SHOW TABLE STATUS