mysql写入数据会用索引吗_MySQL中使用索引与不使用索引的区别

为了回答索引对数据库性能的影响,做了一次简单的实验。

测试环境

MySQL 5.7.10  innodb  100万随机数据

表结构

CREATE TABLE `table1` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`col1` varchar(1000) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1000000 DEFAULT CHARSET=utf8;

生成随机数据 ,并插入数据

myql中 执行call insert_calues(10000);

CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(1000) CHARSET utf8

BEGIN

DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

DECLARE return_str VARCHAR(1000) DEFAULT '';

DECLARE i INT DEFAULT 0;

WHILE i < n DO

SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));

SET i = i +1;

END WHILE;

RETURN return_str;

END;

DELIMITER ;;

CREATE PROCEDURE `insert_values`( m INT)

BEGIN

SET @i=1;

WHILE @i

INSERT INTO TABLE1(col1) SELECT rand_string(10) ;

SET @i=@i+1;

END WHILE;

END;;

DELIMITER ;

测试方式

shell 并发查询

增加索引并测试

ALTER TABLE table1 ADD INDEX col1(col1(10));

#time bash sql_test.sh

Time: 0

real 0m0.313s

user 0m0.308s

sys 0m0.129s

删除索引并测试ALTER TABLE table1 DROP INDEX col1;

#time bash sql_test.sh

Time: 10

real 0m9.989s

user 0m0.322s

sys 0m0.130s

测试使用的sql_test.sh内容如下

trap "exec 203>&-;exec 203

mkfifo 203fifo

exec 203<>203fifo

rm -rf 203fifo

#控制并发数量,如n<=20代表并发20次

for((n=1;n<=20;n++))

do

echo >&203

done

start=`date "+%s"`

for i in {1..100} ;

do

read -u203

{

key=$(openssl rand -base64 9)

mysql test1 -e 'select SQL_NO_CACHE id from table1 where col1 ="${key}"'

echo >&203

}&

done

wait

end=`date "+%s"`

echo "Time: `expr $end - $start`"

exec 203>&-

exec 203

总结

使用索引时,能极大提高SQL性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值