我有mysql数据库,其中一个表有700万条记录,表需要优化,我有点犹豫要添加索引,因为这需要花费很多时间来添加700万条记录。我一直在慢速查询日志中获取此表查询,沿着查询以乐观的方式编写。
处理此问题的最佳方法是什么,以便在慢查询中不会出现表查询?
答案 0 :(得分:0)
没有您的代码,没有明确的帮助。索引是要走的路,它需要一点时间,但它只需要一次。它确实增加了插入的开销,但这是提高查询效率的代价。
答案 1 :(得分:0)
您需要创建一个索引。不完全是。也许甚至不止一个。
对于没有索引的700万行的查询将会变慢。你可以拆分表或为缓存分配大量的内存,但是索引可以让你获得更大的收益。
您可能会问,您应该创建哪个索引?好问题。这取决于您针对表运行的特定查询。表格设计由您的数据决定,但优化由您的查询决定。
学习使用EXPLAIN。请参阅Explain Demystified。
了解索引的工作原理。见More Mastering the Art of Indexing
重新评论:是的,主键隐含地有一个索引(至少在MySQL中),但我不知道你需要提高查询是否有益于该索引。
这里有一个提示:当我想在一个非常大的表上试验索引时,我会从行的子集中创建一个复制表。
mysql> create table test.mytable as select * from realdb.mytable limit 10000;
mysql> use test;
在表格中放入一些非常重要的行,但只需要很少的行就可以使用不会太长的时间。
现在,您可以创建和删除索引并测试查询以查看它们的执行方式。一旦确定了可以带来最大收益的索引,您就可以更加确信在真实数据库上创建它们是值得的。
答案 2 :(得分:0)
从table1中删除column1 in(从table2中选择column1);不是最佳的。
尝试
delete table1 t1
from table1 t1
inner join table2 t2 on t2.column1 = t1.column1
where conditions=true;
我相信它应该表现得更好