Heim > Backend-Entwicklung > PHP-Tutorial > MYSQL的一个表中的数据已经达到了2000万条 怎么能更近一步优化

MYSQL的一个表中的数据已经达到了2000万条 怎么能更近一步优化

WBOY
Freigeben: 2016-06-13 10:04:55
Original
1244 Leute haben es durchsucht

MYSQL的一个表中的数据已经达到了2000万条 如何能更近一步优化
MYSQL的一个表中的数据已经达到了2000万条
数据查询很慢很慢了, 不知道如何改进?

现在的方法都是做了很多缓存表,但是数据都不实时了。

我执行这样一条语句 select max(id) from unit_keywords 用了 7 秒,机器性能比较好,64位,4核,8G内存

------解决方案--------------------
检查主键和索引的构造是否正确。

难道是用文字作主键?

2000万虽然多,也不至于7秒啊。


------解决方案--------------------
检查 mysql配置文件吧。
也许你的配置是小型数据库用的
------解决方案--------------------
2000W就这样,性能还这么高,看看mysql buffer的设置

不行就分表处理吧
------解决方案--------------------
这个问题其实不该在PHP版发,事实上应该找DBA和系统架构师来帮你解决问题。

从select max(id) from table需要7s的问题来看,就主流做法将id作为自增长主键的来考虑,也是有可能的,这意味着你的业务遭遇了锁竞争。 (这个字段如果不是主键或者索引,2000万行下7s返回倒真得说你的机器配置挺不错了)
我想应该是你们的业务同时存在对这个表进行SELECT、INSERT和UPDATE的操作,甚至还可能会有DELETE。 事实上,很多业务为了追求性能,是采用MySql的MyISAM表,并将业务进行优化,仅保留SELECT和INSERT操作的。 这是因为INSERT无需锁表,而SELECT之间也不会互锁。 至于需要更新数据的问题,完全可以通过将需要更新的字段剥离到新表中,对新表进行UPDATE的方法来进行(当然,这是在UPDATE操作并不太频繁的情况下,太频繁的话就没有意义了)。

另外就是根据业务的查询子句,建立相应的索引。 MySql的Explain指令可以起到很大的参考作用。
而缓存表的问题,则建议你们通过另外的缓存服务比如APC或者Memcache之类来实现,并确保在更新数据的同时对缓存进行更新。

不清楚你的表结构,只是说明些常见做法。 如果可以的话,建议你将show create table的结果放出来会更利于分析。 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage