Size sadece seçmek birini yapıyorsun hazırlanmış bir Select deyimi kullanmak daha iyidir?

6 Cevap php

Şu anda PDO kullanarak PHP bir CRUD sınıf yazıyorum.

Ben ifadeleri sağlayan hazırlanan güvenlik seviyorum, ama onlar da queryCache kullanarak MySQL gibi veritabanlarını önlemek olduğunu duydum.

Bu sadece bir anda bir seçme yaparken zaman hazırlanmış bir Select deyimi kullanmak daha iyidir? ya da sadece $ pdo-> alıntı () güvenlik bakış açısını yeterli (veya önbelleğe alma gibi herhangi başka avantajları var?) olurdu.

Bütün güncelleme, silme ve ekler zaten hazırlanmış deyimleri kullanılarak yapılır. Ben seçer hakkında sadece merak ediyorum.

6 Cevap

MySQLPerformanceBlog.com ilgili bir makalede bazı kriterleri yaptım "Prepared Statements." Peter Zaitsev yazdı:

I’ve done a simple benchmark (using SysBench) to see performance of simple query (single row point select) using standard statement, prepared statement and have it served from query cache. Prepared statements give 2290 queries/sec which is significantly better than 2000 with standard statements but it is still well below 4470 queries/sec when results are served from query cache.

Hazırlanan bu ifadeleri kullanarak "havai" onlar en azından bu basit testte düz bir sorgu yürütme, kullanarak daha 14.5% faster olmasıdır olduğunu söylemek gibi görünüyor. Göreli fark muhtemelen daha karmaşık bir sorgu veya daha büyük bir sonuç kümesi ile azalır.

Bu sunucuya çift gidiş-dönüş ve diğer faktörler göz önüne alındığında, karşı-sezgisel hazırlanmış sorgular daha hızlı olacak gibi görünüyor. Peter benchmark detaydan yoksun. Neyse sorgu türü çalıştırmak, çünkü, kendi sınamaları çalıştırmak gerekir, ve çevre ve donanım, kesinlikle önemli faktörlerdir.

Sorgu Cache gelince, bu ifadeleri önbelleğe sorgu sonuçları ile uyumsuz hazırlanan geçmişte doğruydu, ama bu değişti. Bkz: "How the Query Cache Operates" MySQL belgelerinde:

Before MySQL 5.1.17, prepared statements do not use the query cache. Beginning with 5.1.17, prepared statements use the query cache under certain conditions, which differ depending on the preparation method: ...

Belgeler, bu koşulları açıklamak için devam ediyor. Okumak gidin.

I SELECT sorguları için hazırlanmış deyimleri kullanmanızı öneririz. Eğer sürekli bunu yaparsanız, SQL ifadeleri içine sokmak gibi değişkenleri alıntı etkili olabilir. Ama bu bile alıntı örneğin, bazı ince güvenlik açıkları olabilir multi-byte karakter setleri ile (MySQL hata # bakın 8378). Bu durumlarda, güvenli bir şekilde hazırlanmış sorguları kullanmak daha kolaydır.

Evet, hazır deyimleri kullanın. Ben ciddiye sadece normal bir edebi sorgu çok yavaş çalışıyor hazırlanıp performans sorunlarla şüpheliyim. Ancak, MySQL, sen doğru gibi görünüyor. Ben yine de hazırlanan tablolar için tercih olacaktır.

Here is one reference: http://www.mysqlperformanceblog.com/2006/08/02/mysql-prepared-statements/

Önbelleğe alma hakkında endişeli iseniz, memcached gibi şeyler bakmak isteyebilirsiniz rağmen.

here: dan tartışma teyit ettiği gibi, bu, benim anlayış

A normal query is taken as a single string, parsed, executed, and returned. End of story. A prepared statement is taken as a template string, parsed, and cached. It then has variables passed into it, almost like a function call.

Caching the query once tends to cost a little bit more than just executing it straight. The savings come in later calls, when you skip the compilation step. You save per repeated query the amount of the compilation.

Yani, kısacası, MySQL, sen hazırlamak, bir kez sorgu yürütülürken eğer sadece işleme gereksiz bir ekstra miktarda ekler.

Hazırlanan tablolar genellikle daha iyi uygulama olarak kabul edilir.

Ben kılçıklı sorguları geleneksel düz vanilya üzerine hazırlanmış tablolar ve pratik ve avantajları MySql article enterpole okuma öneririz.

Eğer sadece belirli bir "kere" uygulama ömür boyu, ya da "bir zamanlar" işlevine çağrı başına yapıyor musunuz?

Ikincisi ise, yine zaten hazır açıklamada önbelleğe faydalanması gerektiğini çünkü.

Ufak bir hatırlatma, hazırlanan tabloların MySQL> 5.1.17 does use sorgu önbellek.

Kod POV i hazırlanmış tablolar çoğunlukla, vb okunabilirlik, idame, açısından gitmek için yol olduğuna inanıyoruz ..

Bunları kullanmak için değil bir nedeni bazı frekans denilen olsun pahalı sorgular olacaktır. (Çalıştırmak için çok zaman alır ve sorgu önbellek olmanın gerçek bir yararı var sorgular).