我有一個查詢,看起來像指數:優化MySQL查詢使用上按位where子句
select count(*) from m1
WHERE (m1.`resource` & 1472);
雖然我對資源有指標不使用它。如何優化使用按位操作。
我有一個查詢,看起來像指數:優化MySQL查詢使用上按位where子句
select count(*) from m1
WHERE (m1.`resource` & 1472);
雖然我對資源有指標不使用它。如何優化使用按位操作。
我不相信MySQL可以使用索引進行按位操作。
在MySQL性能論壇中對此有一些討論:http://forums.mysql.com/read.php?24,35318(「索引掃描是否可能進行按位比較?」),其中一位MySQL員工建議一個解決方案,該解決方案基於每個表具有一行的表)對和做一堆連接。我猜想,這個工作的效果將取決於你的特定應用。
根據http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html索引對SET
值(使用整數和按位運算實現)執行相同類型的操作沒有任何用處。我曾想過,如果按位操作有任何巧妙的索引優化,它已經應用於SET
。
如果MySQL認爲它必須對錶中的每一行執行計算,則不會使用索引。
優化這些查詢的唯一方法是從資源列中刪除計算。你如何做到這一點取決於你想達到什麼。
例如 - 此不使用索引
其中indexedCol * 2 = 6;
但這 -
其中indexedCol = 6/2;
不知道您是否可以在按位操作時實現該操作。
贊成反對解釋。 – Jai 2011-03-18 14:22:33
在Sql服務器上,它使用按位操作的索引。我試圖重現MySql上的性能,但不能...... MySql是一個好主意,但如果他們不考慮按位運算的基本性能,例如,這確實是一個很大的失望!
嗨。也許這個鏈接可以幫助你。 http://explainextended.com/2009/10/01/bitwise-operations-and-indexes/ – 2011-03-18 13:11:40
我確實知道那篇文章,我正在嘗試實現類似於該方法的內容,但我沒有要比較的數字用。 – Pentium10 2011-03-18 13:26:57