2012-08-28 29 views
1

MyPHP應用程序通過HTTPClient向MySQL發送SELECT語句。MySQL的性能

需要大約20秒或更長時間。 我以爲MySQL無法立即得到結果,因爲MySQL管理員在等待結果時顯示爲sending datacopying to tmp table

但是,當我從另一個應用程序,如phpMyAdmin或jmater發送相同的SELECT語句,它需要2秒或更少的10倍!

有人知道MySQL的性能如此不同嗎?

+1

向我們顯示查詢,如果您可以在mysql控制檯中顯示'EXPLAIN '的輸出,它也會有所幫助。 – Martin

+0

什麼是查詢,表格模式和表格中有多少行? – GordonM

+1

一些*神祕*查詢(和或代碼)很慢,您認爲我們可以幫助您嗎? – 2012-08-28 09:06:45

回答

1

像@symcbeanØ已經說過,PHP的MySQL驅動程序緩存查詢結果。這也是爲什麼你可以在while($row=mysql_fetch_array())循環中做另一個mysql_query()

MySql Administrator或phpMyAdmin顯示結果如此之快的原因是他們在您的背後附加了一個LIMIT 10

如果你想讓你的查詢結果更快,我可以提供一些提示。它們涉及只選擇你需要什麼,當你需要:

  • 只選擇你需要的列,不要扔select *無處不在。這可能會在稍後想要另一列時咬你,但忘記將它添加到select語句中,因此需要時(如100列或100萬行的表)。
  • 不要在您的用戶面前丟棄20乘1000表。無論如何,她無法找到她在巨大的桌子上尋找的東西。提供排序和過濾。作爲獎勵,找出她一般尋找的東西,並提供一種單擊即可顯示該記錄的方法。
  • 對於非常大的表格,只選擇您需要的記錄的主鍵。檢索while()循環中的其他詳細信息。這可能看起來不合邏輯,因爲你做了更多的查詢,但是當你處理涉及大約10個表,數百個併發用戶,鎖和查詢緩存的查詢時,事情並不總是有道理:)

這些是我從我的老闆和我的經驗中學到的一些提示。一如既往,YMMV。