我在公司表上拥有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分钟后我不得不终止查询。我确实检查了上述查询的解释,并使用公司索引作为关键:
更新:
我创建了一个重复的空表,然后从中删除了无关的字段和所有索引,然后添加了三个索引:
我也跑了
Alter Table Company Auto_Increment=1
由于我的自动增量因持续工作而超过10,000,000。
继续测试
答案 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
。