比如wordpress,评论已经上W条,虽说也不多。
但每天
SELECT commentapproved, COUNT( * ) AS total FROM wp_comments GROUP BY comment_approved;
的次数不少。Handler_read_next非常大。
单纯通过改语句我觉得意义不大,毕竟wp更新后可能就会失效。
myisam在count是完全没有任何handle_read*的产生。
而innodb每count一次,Handler_read_next就会加上整表的总数。
虽然速度没有影响,但这样貌似应该会影响性能吧?
请各位指教下,谢谢
1
lidashuang 2015-02-27 19:19:15 +08:00
加个字段记录count
|
2
kn007 OP 其他项目可以,但wordpress不现实吧?
|
3
kn007 OP @lidashuang 已解决了。。读取自增值
|
4
kn007 OP @lidashuang 但只能模糊查询
|
5
kn007 OP 还是不行
|
6
zhengkai 2015-02-28 01:35:17 +08:00
COUNT(*) 改成 COUNT(id) 之类的
话说不是学习过程中每一个问题都要带到论坛上来问,你学习不是为了给别人看的。找本《高性能MySQL》看看,然后自己多做做试验吧 |
7
zhengkai 2015-02-28 01:37:36 +08:00
我第一行的回答是对 1 楼的解释,1 楼已经给你答案了但是你看不懂,你另外一个问题我也回答了,但是你也是看不懂,我本来想解释,但是发现要解释的内容太多,你还是多自己看看吧。话说你的这些问题完全可以自己设计一组测试来给自己解答
|
8
SoloCompany 2015-02-28 02:42:52 +08:00 1
如果不需要比如外键和存储过程之类的所谓高级特性,MyISAM 最大的问题仅仅是所有数据访问都要锁表,好像类似于 wordpress 这种系统没有太大影响吧,如果能用 MyISAM 解决问题,建议还是直接用 MyISAM 来解决,因为简单
|
9
kn007 OP @zhengkai 。。。已经是Using index了,伙计。我只注意handle_read,两者相同。我试了下,两者一样。我试过了的,好吧
至于你说的,没错。不过如果不是没有头绪,我也不会问。 |
10
kn007 OP @zhengkai 我在顶楼已经说的非常清楚了。单纯通过修改语句、或者增加个存储字段,对wordpress意义不大。我并不是单纯给自己使用,给别人用呢?如果对方wordpress自动更新后呢?
|
11
kn007 OP @SoloCompany 好的,谢谢
|
12
Livid MOD 能快多少,或者会慢多少,最好的方法是自己实际做对比测试。
比如测试 InnoDB 和 MyISAM 用到同样查询的页面的 apachebench 性能会有多少差别。 |
13
kn007 OP @Livid 谢谢,这个测了一下,是MyISAM比INNODB更多的qps。毕竟select count是直接返回。不过相差其实不算大。。。或许你的意思是说考虑这个(查询)的优化意义并不是很大?
|
16
nine 2015-02-28 09:11:54 +08:00
innodb 在“排序字段”和 “主键”上加联合索引即可,放心大胆count(*)
|
17
kn007 OP |
18
kn007 OP @Livid 嗯,是的,我现在是给count进行mc存储,使用increment和decrement,倒是不影响。主要是想给别人弄,这家伙呢,又是经常瞎折腾的,经常重新安装wordpress(覆盖安装),就数据库没动。那家伙又有点强迫症,觉得myisam好,select count直接得到值。我是认为用innodb好,不用Optimize。所以我就想能不能解决select count 的问题。嘿嘿。
性能上实际是没有影响的,就是Handler_read不好看而已。 |
19
Actrace 2015-02-28 10:45:34 +08:00 1
count的最好方法就是在你知道什么元素需要count之前做个计数器。
|
20
withrock 2015-02-28 10:48:16 +08:00
我讨厌回答技术性问题用“自己去百度一下/自己去翻书”这样的方式。
|