我有mysql DB,其中一个表有700万条记录,表需要优化,我有点犹豫添加索引,因为这将需要很多时间来添加700万条记录。我一直在慢查询日志中得到这个表的查询,沿途查询都是以乐观的方式写的。
处理这个问题的最好方法是什么,这样表查询就不会出现在慢查询中?
发布于 2010-08-19 23:22:03
Delete from table1 where column1 in (select column1 from table2);不是最佳的。
试一试
delete table1 t1
from table1 t1
inner join table2 t2 on t2.column1 = t1.column1
where conditions=true;我相信它应该表现得更好
发布于 2010-08-19 07:44:57
没有你的代码,就没有明确的帮助。索引是要走的路,它会花费一些时间,但只有一次。这确实会增加插入的开销,但这是提高查询效率所要付出的代价。
发布于 2010-08-19 07:49:27
您需要创建一个索引。不,真的。甚至可能不止一个。
在没有索引的情况下对700万行进行查询将会很慢。您可以拆分表或分配大量内存用于缓存,但是索引可以为您带来更多的实惠。
你可能会问,你应该创建哪个索引?问得好。这取决于您对表运行的特定查询。表的设计由您的数据决定,但优化由您的查询决定。
学习使用EXPLAIN。参见。
了解索引是如何工作的。请参阅
请回复您的意见:是的,主键隐式地有一个索引(至少在MySQL中是这样),但是我不知道您需要改进的查询是否能从该索引中受益。
这里有一个提示:当我想在一个非常大的表上试验索引时,我会从行子集创建一个复制表。
mysql> create table test.mytable as select * from realdb.mytable limit 10000;
mysql> use test;在表中放入非常多的行数,但数量要足够少,这样做不会花费太长时间。
现在,您可以创建和删除索引,并测试查询以查看它们的性能。一旦您确定了给您带来最大好处的一个或多个索引,您就可以更有信心地相信,在您的实际数据库上创建它们是值得的。
https://stackoverflow.com/questions/3517614
复制相似问题