?SQL優(yōu)化功能可以為您的慢SQL提供索引建議、檢測因隱式轉換,函數(shù)等表達式不能使用索引的情況。請大家參考以下幾個例子:
?? ? ?1.創(chuàng)建表:? ? ??
? CREATE TABLE `tb1` (? ? ? ? `c1` int(11) NOT NULL,? ? ? ? `c2` varchar(32) DEFAULT NULL,? ? ? ? `c3` double DEFAULT NULL,? ? ? ? KEY `IDX_C2` (`c2`),? ? ? ? KEY `IDX_C3` (`c3`)? ? ? ? ) ENGINE=InnoDB DEFAULT CHARSET=utf8? ? ? 2.插入數(shù)據(jù):? ? ? ? insert into `tb1`(`c1`,`c2`,`c3`) values? ? ? ? ('1','a1',3.14159), ('2','a2',3.1321), ('3','a3', 3111), ('4','a4', 123), ('5','a5',3.1234), ('6','a6',3.1122), ('7','a7', 4321);============================================================================? ? ??
例子1(生成索引建議):? ? ? SQL:? SELECT * FROM tb1 where c1 = 1;? ? ? 建議 :? ? ALTER TABLE tb1 ADD INDEX IDX_C1 (C1)? ? ? 原因 :? ? C1 = 1 能夠篩選出一行數(shù)據(jù),我們認為這個字段過濾性比較高,所以推薦在C1上創(chuàng)建索引。 ============================================================================? ? ?
?例子2(檢測隱式轉換):? ? ? SQL:? SELECT * FROM tb1 where c2 = 1;? ? ? 建議 :? ? 表達式【tb1.c2 = 1】存在隱式轉換,會導致不能使用該列索引,建議使用【tb1.c2 = '1'】。============================================================================? ? ?
?例子3(檢測函數(shù)):? ? ? SQL:? SELECT * FROM tb1 where ABS(c3) = 123;? ? ? 建議 :? ? 表達式【ABS(c3)】的索引列使用函數(shù)會導致不能使用該列索引,建議改寫該表達式。