我对如何优化我的SQL查询有点困惑。我有一个中间复杂的查询,一些连接每秒钟运行一百到几百次(SSD上有两个表,一个RAM在RAM中,有四个JOIN)如何在高负载下优化mysql查询的性能?
如何最小化执行的开销?有没有什么方法可以预编译查询,以便MySQL不需要每次都分析,优化和编译查询?
我知道我可以使用预准备语句来预编译一个查询,然后在同一个会话中执行多次查询。但如果您有多个会话并且每个会话只有一个查询,该怎么办?准备好的语句是否在不同的会话中被缓存?我不这么认为。
然后我认为存储过程是最好的方法,因为它们被预编译。现在我读到这个假设是完全错误的,他们事实上是而不是预编译。
是否可以在MySQL中共享客户端会话在以下会话继承的第一个会话中使用预准备语句?
最后一个想法是编写一个多线程套接字服务器来像MySQL客户端代理一样工作。但是这对我来说似乎有点夸张。 ;-)
我使用PHP作为Apache2模块。是否有机会将MySQL会话“存储”在共享内存中,以便下面的HTTP请求可以使用现有的MySQL会话而不是启动一个新的会话?这样我可以在不同的HTTP请求中使用预准备语句?
“运行hundret每秒一千次” - 照顾扩大。不是通常的网络应用程序 –
您似乎确实专注于跨会话共享/缓存已编译的查询,但如果您的瓶颈是由于编译而非I/O造成的,则这只会提高性能。索引和缓存不在这里?为什么您的查询每秒运行1000次?我认为我们需要更多地了解您的实际问题以提供帮助。 – Phil
使用memcache。它总是拯救你的生命。 – hakiko