簡體   English   中英

MySQL預處理器優化

[英]MySQL preprocessor optimization

在啟動查詢之前,有沒有人知道MySQL是否涉及任何預處理器優化?

考慮以下查詢:

string query = "SELECT giveaway_id FROM giveaways WHERE status >= @minStatus AND status <= @maxStatus AND type >= @minType AND type <= @maxType";

如果@minStatus@maxStatus相等,以及@minType@maxType ,我們可以用更優化的形式寫上面的查詢:

string query = "SELECT giveaway_id FROM giveaways WHERE status = @minStatus AND type = @minType";

我想知道MySQL是否足夠智能,或者在我的C#應用​​程序中啟動它之前我應該​​幫助它編寫適當的優化語句。

謝謝。

這取決於你擁有的索引。 INDEX(status), INDEX(type)很沒用。 INDEX(status, type) (或相反的順序) 可能效果很好。

這取決於您使用的是什么版本。 較新版本使用“索引條件下推”,在這種情況下可能更智能。

舊版本可能會看到不平等並決定它是一個“范圍”。 然后它會說“2個范圍,所以我不能使用INDEX(status, type)的兩個部分INDEX(status, type) ”。

EXPLAIN FORMAT=JSON SELECT ... (5.6或更新版本)將為您提供一些線索。

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

(在任何版本中)將為您提供更強的線索。 如果Handler_read_next的值大約等於返回的行數,則它盡可能高效地運行。

另一種可能的皺紋......變量並不總是像文字一樣工作,所以也要用文字值進行測試。

這個評論太長了。

您所指的步驟不是“預處理”,而是“編譯和優化”。 而且,是的,MySQL的做各種優化,描述在這里

然而,你的問題的含義是,單個相等比較=將比兩個不等式快得多。 通常情況並非如此。 更大的問題是索引是否可用於statustype 索引的使用將是性能的主要因素 - 多個不等式可能會阻止MySQL找到最佳索引。

我的建議是為您的查詢創建正確的索引。 然后編寫查詢以確保它們利用索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM