select `sname` from `stu` where `age`+10=30;-- 不會使用索引,因為所有索引列參與了計算
select `sname` from `stu` where left(`date`,4) <1990; -- 不會使用索引,因為使用了函式運算,原理與上面相同
select * from `houdunwang` where `uname` like'金蝶%' -- 走索引
select * from `houdunwang` where `uname` like "%金蝶%" -- 不走索引
-- 正規表示式不使用索引,這應該很好理解,所以這就是為什麼在sql中很難看到regexp關鍵字的原因
-- 字串與數字比較不使用索引;
create table `a` (`a` char(10));
explain select * from `a` where `a`="1" -- 走索引
explain select * from `a` where `a`=1 -- 不走索引,同樣也是使用了函式運算
select * from dept where dname='***' or loc='xx' or deptno=45 --如果條件中有or,即使其中有條件帶索引也不會使用。換言之,就是要求使用的所有字段,都必須建立索引,我們建議大家盡量避免使用or 關鍵字
-- mysql內部優化器會對sql語句進行優化,如果優化器估計使用全表掃瞄要比使用索引快,則不使用索引
---------------------
mysql哪些情況不走索引
在mysql中,並不是你建立了索引,並且你在sql中使用到了該列,mysql就肯定會使用到那些索引的,有一些情況很可能在你不知不覺中,你就 成功的避開了 mysql的所有索引。現假設有t stu表,age,sname上建立了索引 如果where條件中age列中使用了計算,則不會使用該索引 selec...
mysql不走索引總結
在mysql查詢語句中,總會發現明明已經建立了查詢字段索引,可是卻沒有用到,這是因為在mysql中有些查詢語句是用不到索引的,總結如下,以供大家分享。1.like語句 2.列型別為字串型別,查詢時沒有用單引號引起來 3.在where查詢語句中使用表示式 4.在where查詢語句中對字段進行null值...
mysql之不走索引和sql優化
一.不走索引的情況 使用 和 不等於符號查詢 使用 not in not exists 查詢 使用like字尾查詢,如 string 在建立索引和沒有索引的字段上使用or,會導致查詢不走索引 使用 符號,可能不走索引,這個要看優化器的判斷 字串型別字段使用數字進行比較,不走索引,如 varchar ...