100w測試資料,為什麼加了索引查詢反而變慢了?

2021-08-25 08:11:46 字數 2435 閱讀 6986

建表:

create table tb_test(fval varchar(50));

----------------------------------------------

插入測試資料:

delimiter $$

create definer=`root`@`localhost` procedure `p_teset`()

begin

declare v_val varchar(20);

declare v_str varchar(20);

declare v_i int ;

declare v_j int;

set v_str ='abcdefghijklmnopqrstuvwxyz';

set v_i=0;

set v_j=0;

while v_i<600000 do

set v_val ='';

while v_j< 13 do

set v_val= concat(v_val,substring(v_str,1,floor(1+rand()*26)));

set v_j=v_j+1;

end while;

set v_j=0;

insert into tb_test(fval)

values(v_val);

set v_i =v_i+1;

end while;

end$$

delimiter ;

----------------------------------------------

測試like:

select *

from tb_test

where fval like '%ab';

70231條 用時0.531s

select *

from tb_test

where fval like 'ab%'

961406條用時1.422s

---------------------------------------------

加索引:

alter table tb_test add index my_index(fval);

---------------------------------------------

再測試:

select *

from tb_test

where fval like '%ab';

70231條 用時1.094s

select *

from tb_test

where fval like 'ab%'

961406條用時1.485s

表為myisam格式。

為什麼加了索引卻慢了?

select *

from tb_test  

where fval like '%ab';

70231條 用時0.531s

select *

from tb_test  

where fval like 'ab%'

961406條用時1.422s

select * 本身輸出也需要時間,第二個查詢的結果是 961406 條,而第乙個是70231條. 需要考慮這麼多記錄本身的輸出顯示到螢幕上所需要時間。

可以測試

select count(*) from tb_test  where fval like '%ab';

select count(*) from tb_test where fval like 'ab%'

建表:

create table tb_test(fval varchar(50));

----------------------------------------------

插入測試資料:

delimiter $$

create definer=`root`@`localhost` procedure `p_teset`()

begin

declare v_val v……

幾個知識點:

1:like '%ab',這樣萬用字元在左邊的,mysql是不會用到索引的,mysql使用索引用的是最左字首的方式。

2:like 'ab%',這樣可能用到索引,你需要在查詢語句前面加explain關鍵字看看是否用到了索引。

3:檢查乙個sql的效率是否變化了,需要排除出query_cache,在查詢時這樣寫

select sql_no_cache * from ... where ...這樣就不會從query_cache取資料了。多執行幾次取平均值比較靠譜。

mysql 聯表查詢 100w 資料優化

閒來無事,使用vue封裝了個table元件,封裝完成後想測試下,資料量小的情況下,能迅速展現資料,資料上了100w後,直接超時,結果一步步排查,發現是sql查詢的問題 使用表 訂單表 order 100w 商品表goods 使用者表 user 未優化前sql查詢語句 select o.order i...

SQL查詢效率 100w資料查詢只要1秒

sql查詢效率 100w資料查詢只要1秒 關於sql查詢效率,100w資料,查詢只要1秒,與您分享 機器情況 p4 2.4 記憶體 1 g os windows 2003 資料庫 ms sql server 2000 目的 查詢效能測試,比較兩種查詢的效能 sql查詢效率 step by step ...

SQL查詢效率 100w資料查詢只要1秒

機器情況 p4 2.4 記憶體 1 g os windows 2003 資料庫 ms sql server 2000 目的 查詢效能測試,比較兩種查詢的效能 sql查詢效率 step by step setp 1.建表 create table t userinfo userid intidenti...