DROP TABLE IF EXISTS expdata; CREATE TABLE expdata ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value FLOAT, INDEX log10_fi ((log10(value))) ); INSERT INTO expdata (value) VALUES (.01),(.1),(1),(10),(100); SELECT id, value, log10(value) FROM expdata; EXPLAIN SELECT * FROM expdata WHERE log10(value) < 0; EXPLAIN SELECT * FROM expdata WHERE log10(value) = 0; # Maybe log10(FLOAT) is not determenistic? # Let's try with DECIMAL DROP TABLE expdata; CREATE TABLE expdata ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value DECIMAL (10, 2), INDEX log10_fi ((log10(value))) ); INSERT INTO expdata (value) VALUES (.01),(.1),(1),(10),(100); SELECT id, value, log10(value) FROM expdata; EXPLAIN SELECT * FROM expdata WHERE log10(value) < 0; EXPLAIN SELECT * FROM expdata WHERE log10(value) = 0; DROP TABLE expdata;