最近我用php + mysql做了一个很大的项目。现在我关心我的mysql。我该怎么做才能使我的mysql尽可能最佳?告诉你所知道的一切,我会非常感激。
第二个问题,我每页加载一个mysql查询,它从mysql获取信息。这是一个非常大的查询,因为我通过连接从几个表中获取信息。也许我应该做点什么?
谢谢。
答案 0 :(得分:16)
来自MySQL Performance tips forge
的一些重要提示特定查询效果
扩展效果提示:
网络效果提示:
操作系统性能提示:
答案 1 :(得分:3)
学习使用解释工具。
答案 2 :(得分:2)
三件事:
联接不一定是次优的。通常,使用连接的模式将比实现相同但避免表连接的模式更快。重要的是要知道你的连接是最佳的。 EXPLAIN
非常有用,但您还需要了解索引的工作原理。
如果您在每次点击时都从数据库中获取数据,请考虑缓存系统是否适合您。如果是,请查看PHP memcache和memcached。它很容易在PHP中使用,速度非常快。它很受欢迎。
返回mysql:确保密钥缓冲区的大小正确。您还可以考虑为应保留在缓存中的关键索引使用专用密钥缓冲区。阅读CACHE INDEX
和LOAD INDEX INTO CACHE
。另请参阅here。
答案 3 :(得分:1)
“...因为我从一些表中获取信息并加入了”
加入,甚至“大”加入也不错。只要确保你有好的索引。
另请注意,具有几条记录的性能与具有数十万条记录的性能有很大不同,因此请进行相应的测试。
答案 4 :(得分:0)
为了表现,本书很好:High Perofmanace MYSQL。 associated blog也很好。
答案 5 :(得分:0)
我的2cents:将你的log_slow_queries设置为< 2sec并使用mysqlsla(从hackmysql.com获取)来分析'慢'查询...这样你就可以深入了解较慢的查询...
(mysqlsla也可以从log-queries-not-using-indexes选项中受益)
答案 6 :(得分:0)
完美是一个挑战,而不是第一个设定自己的目标。
启用所有查询的mysql日志记录,并编写一些解析日志文件的代码,并从SQL语句中删除任何文字值。
e.g。变化
SELECT * FROM atable WHERE something=5 AND other='splodgy';
和
SELECT * FROM atable WHERE something=1 AND other='zippy';
类似于:
SELECT * FROM atable WHERE something=:1 AND other=:2;
(对不起,我没有得到这样做的代码 - 但这不是火箭科学)
然后将重写的日志推送到表中,以便根据执行的长度和频率确定性能修正的优先级。