存储过程+函数 创建千万的测试数据

用MYSQL的存储过程创建千万级测试数据表
1创建表

CREATE TABLE `think_user` (`uid` int(11) NOT NULL AUTO_INCREMENT,`u_name` varchar(20) NOT NULL,`u_pwd` varchar(64) NOT NULL,`user_group` int(11) NOT NULL COMMENT '用户组',`form_id` int(11) NOT NULL,PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户表';CREATE TABLE `think_form` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(20) NOT NULL,`description` varchar(255) NOT NULL,`file_url` varchar(255) NOT NULL,`content` varchar(255) NOT NULL,`subject_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='自定义表单';CREATE TABLE `think_group` (`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,`title` char(100) NOT NULL DEFAULT '',`status` tinyint(1) NOT NULL DEFAULT '1',`rules` char(80) NOT NULL DEFAULT '',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户组';

2创建函数

show FUNCTION status;
##创建随机数500内的
drop function if exists rand_num;
CREATE function rand_num()
returns int(5)
BEGINDECLARE i int default 0;set i = FLOOR(10+RAND()*500);return i;
END##创建一个随机字符函数
delimiter $$
drop function if exists rand_string;
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(52) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare i int default 0;
while i<n do
set return_str=concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i=i+1;
end while;
return return_str;
end $$
delimiter ;##创建一个随机汉字函数
delimiter $$drop function if exists rand_name;
create function rand_name(n int) returns varchar(255)
begin
declare chars_str text default '们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这主中人上为来分生对于学下级地个用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然如应形想制心样干都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借';
declare return_str varchar(255) default '';
declare i int default 0;
while i<n do
set return_str=concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i=i+1;
end while;
return return_str;
end $$
delimiter ;

3 创建存储过程

#show PROCEDURE STATUS
#show create procedure insert_user#创建插入用户表的存储过程
drop PROCEDURE if EXISTS insert_userCREATE DEFINER=`root`@`localhost` PROCEDURE `insert_user`(in start_no int(10), in max_num int(10))
BEGINDECLARE i int DEFAULT 0;set autocommit = 0;repeatset  i = i+1;INSERT into think_user VALUES(null,rand_name(3), rand_string(6), rand_num(), rand_num());UNTIL i =max_numEND repeat;set autocommit = 1;
END#call insert_user(1,19999999);#创建插入form表的存储过程
drop PROCEDURE if EXISTS insert_form;CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_form`(in start_no int(10), in max_num int(10))
BEGINDECLARE i int DEFAULT 0;set autocommit = 0;repeatset  i = i+1;INSERT into think_form VALUES(null,rand_name(5), rand_name(20),  'bd.com',rand_name(50), 200);UNTIL i =max_numEND repeat;set autocommit = 1;
END#call insert_form(1,550);

4 执行时间

索引是帮助mysql高效获取数据排好序的数据结构
数据库的存储,基本都在硬盘中,查询数据就是磁盘的扫描
如果不加索引,你也没有limit 1,你查找一条数据,那么会全盘扫描,把整个磁盘中的数据全部扫描一遍

索引数据结构 -常见的数据结构

  • 二叉树
  • 黑红树
  • Hash表
  • B-Tree
  • B+Tree

图形化展示数据结构的原理,
https://www.cs.usfca.edu/~galles/visualization/source.html(或点击文章底部附件下载)

二叉树
百科简介
https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91/1602879?fr=aladdin
它有好多个延申版本,一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树等
一般二叉树
对于它的顶端,左边小(左子树), 右边为大(右子树) ,演示BST.html

一般二叉树的局限性:一般的索引数据结构,都是自增的,自增会导致会退化成链表,所以数据越多,效率越低

红黑树
(是一种自平衡二叉查找树) ,本质上也是一种二叉树,他的自平衡(黑平衡),不会一边倒,不会单边的增长,简单的演示一下
节点是红色或黑色,根节点是黑色。
每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
演示RedBlack.html

局限性: 数据量大会导致层数太多,这样就会造成查找数据慢

Hash
hash索引,索引中的所有列,存储引擎都会为每一行计算一个hash码,hash码都是比较小的,并且不同键值行的hash码通常是不一样的,hash索引中存储的就是Hash码,这就是为什么hash索引只能进行全职匹配的查询,因为只有这样,hash码才能够匹配,同时在hash索引表中保存了hash码代表的每一行的数据指针,因为hash索引中只有每一行的hash码,索引数据结构紧凑,使得使用hash索引找到数据的速度很快,但是也存在一些限制

hash索引的限制
使用hash索引查找数据必须进行两次读取,因为hash索引中包括的只是键值,hash码和执行对应行的指针,索引中没有保存对应的值,索引首先必须要找到对应的行,之后对对应的行的值进行读取,如果使用hash索引进行查询要进行两次查找,但是memory存储引擎和innodb存储引擎的被频繁访问的行基本上都是缓存在内存中,对内存中的数据进行访问速度都很快,
其次hash索引是按照hash码的顺序来存储的而不是按照键值的方式来存储的,不能像B树索引一样对查询结果进行排序
hash索引只能进行全键值的匹配查找,而不支持部分键值的匹配查找,同时也不支持键值的范围查找,这也是hash索引的存储特点决定的,无法把一个范围值和具体的hash码进行匹配
hahs索引在进行hash索引的时候会出现hahs冲突,hash索引不适合用在选择性差的列上面,重复值很多的列上,身份证的列比较好,因为重复的少
B-Tree
一个节点可以存储多个数据,这样可以避免黑红树的缺点,树的层数很变小
缺点 :节点里面数组数据:每个数据的结构=索引数据+数据记录(即叶子节点存储键值和数据记录)


B+Tree
是B-Tree升级版
可以理解为 一个给索引加索引的树,它冗余了更多的索引,去牺牲空间,来获取性能,它的树高度基本固定,宽度更宽,横向存储更多索引,B-tree索引是最常见的索引,通常说的索引指的就是B树索引,使用的是B+树的结构来存储数据,在B+树种每一个叶子节点都包含一个指向下一个节点的叶子指针,可以方便的进行叶子节点之间的遍历,所以范围查询性能比较好。

B+树索引有什么限制?明明建立了索引,但是查询的时候却无法使用的索引这种情况,这和很多因素有关,比如,如果使用索引命中的数据如果占用了表中的大部分的数据,那么,mysql的查询优化器可能会认为使用全表扫描的方式会更好,就不会使用索引的方式进行查询,使用B树索引有很多限制,如果是在B树索引使用在受限制的地方就无法使用到索引,使用B树索引的限制有什么?
如果不是按照从索引的最左列开始查找的,则无法使用索引
使用B树索引的时候,不能跳过索引中左边的列而使用索引,这里指的是左边的列而不是最左边的列
通常来说not in 和<>操作是无法使用索引的
如果查询中有某个列是范围查询,则其右边所有列都无法使用索引

hash 索引和B树索引是最常见的两种类型,索引的优化也是针对这两种类型进行的

速度够快,hash算法表对应磁盘地址,但是 不支持 范围查询,没法支持

最左原则 - 在B+tree 里, 联合索引/组合索引,优先整形和浮点型,然后组合索引顺序一样跟查询的where条件的顺序一样

聚集索引 : 如 innodb 索引 (索引下面跟着数据

非聚集索引 如 myisam 索引和hash索引 (索引指向数据的磁盘地址,索引和数据分离的)

MySQL索引的类型

1.普通索引
–直接创建索引
CREATE INDEX index_name ON table(column(length))

–修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
–删除索引
DROP INDEX index_name ON table

2. 唯一索引+主键索引
与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。
–创建唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
–修改表结构
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
ALTER TABLE test1.think_form
DROP INDEX title,
ADD UNIQUE INDEX title(title) USING HASH COMMENT ‘表单名称’;
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
创建表的时候指定 PRIMARY KEY (id)

唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为非空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引
如果一个主键被定义了,那么这个主键就是作为聚集索引
如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引
如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。

3. 全文索引(FULLTEXT)
MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加,短数据只要创建普通索引即可。
对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。
–直接创建索引
CREATE FULLTEXT INDEX index_content ON article(content)
–修改表结构添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content)

4 组合索引(最左前缀)
平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合索引:
ALTER TABLE test1.think_user
ADD INDEX group_name_pwd(user_group, u_name, u_pwd) USING BTREE;

建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
–user_group,u_name,u_pwd
–user_group,u_name
–user_group
因为MySQL组合索引“最左前缀”的结果,简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,如下面的几个SQL所示:
–使用到上面的索引
SELECT * from think_user where user_group=383 and u_name=“我为为” and u_pwd=“BpVJGg” limit 1;
SELECT * from think_user where user_group=383 and u_name=“我为为” limit 1;
SELECT * from think_user where user_group=383 limit 1
–不使用上面的索引
SELECT * FROM article WHREE u_name=“我为为”;
未加索引之前

加了之后

索引key_len

u_name varchar(20) = 203+2
u_pwd varchar(64) = 64
3+2
user_group int(11) = 4
总的key_len=62+194+4=260,说明3个组合索引都用到了

MySQL索引的优化
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。下面是一些总结以及收藏的MySQL索引的注意事项和优化方法。

  1. 何时使用聚集索引或非聚集索引?

事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。
2. 索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
3. 使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。(如密码为18位的随机字符串,这时候你可 add index u_pwd(5)) ,用前5位进行快速索引,当时现在空间不值钱,数据量越大重复度越来越高,所以一般非特殊要求都不用短索引
4. 索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
5. like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
6.尽量不要在列上进行运算(函数操作和表达式操作)
select * from iroomtypeprice where amount/30< 1000
当改写成下面的SQL语句时效率明显提高了:
select * from iroomtypeprice where amount< 1000*30
7.避免使用or连接,同列or可以转换为in, innodb对or的查询条件会运行多次单独的查询然后合并结果,时间复杂度为O(n),而对于In操作,innodb使用的是基于树的二分查找,时间复杂度为O(log n),显然In更快
8.复合索引顺序很重要
复合索引第一列不需要再次建立单列索引
order by和group by后面接的列与复合索引顺序一致时可以利用复合索引避免排序和临时表

最后总结一下,MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。而理论上每张表里面最多可创建16个索引,不过除非是数据量真的很多,否则过多的使用索引也不是那么好玩的

SQL慢查询的优化
一、第一步.开启mysql慢查询
修改配置文件 在 my.ini 增加几行: 主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录( slow_query_log)

方法二:通过MySQL数据库开启慢查询:

一、第二步.EXPLAIN 分析慢查询日志
直接分析mysql慢查询日志 ,利用explain关键字可以模拟优化器执行SQL查询语句,来分析sql慢查询语句
优化LIMIT分页
在系统中需要分页的操作通常会使用limit加上偏移量的方法实现,同时加上合适的order by 子句。如果有对应的索引,通常效率会不错,否则MySQL需要做大量的文件排序操作。

  一个非常令人头疼问题就是当偏移量非常大的时候,例如可能是limit 10000,20这样的查询,这是mysql需要查询10020条然后只返回最后20条,前面的10000条记录都将被舍弃,这样的代价很高。优化此类查询的一个最简单的方法是尽可能的使用索引覆盖扫描,而不是查询所有的列。然后根据需要做一次关联操作再返回所需的列。对于偏移量很大的时候这样做的效率会得到很大提升。对于下面的查询:select id,title from collect limit 90000,10;该语句存在的最大问题在于limit M,N中偏移量M太大(我们暂不考虑筛选字段上要不要添加索引的影响),导致每次查询都要先从整个表中找到满足条件 的前M条记录,之后舍弃这M条记录并从第M+1条记录开始再依次找到N条满足条件的记录。如果表非常大,且筛选字段没有合适的索引,且M特别大那么这样的代价是非常高的。 试想,如我们下一次的查询能从前一次查询结束后标记的位置开始查找,找到满足条件的100条记录,并记下下一次查询应该开始的位置,以便于下一次查询能直接从该位置 开始,这样就不必每次查询都先从整个表中先找到满足条件的前M条记录,舍弃,在从M+1开始再找到100条满足条件的记录了。

附件

https://www.cs.usfca.edu/~galles/visualization/visualization1.5.tar.gz

sql优化+索引优化+详解(存储过程+函数 创建千万的测试数据)相关推荐

  1. 【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》

    [肝帝一周总结:全网最全最细]☀️Mysql 索引数据结构详解与索引优化☀️<❤️记得收藏❤️> 目录

  2. Sql server索引优化

    Sql server索引优化 索引优化(1)堆上的非聚集索引 一.索引概述 1.概念 可以把索引理解为一种特殊的目录.就好比<新华字典>为了加快查找的速度,提供了几套目录,分别按拼音.偏旁 ...

  3. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

  4. 数据库-优化-SQL及索引优化

    SQL及索引优化 mysql安装与卸载(linux在线安装与卸载) 数据库版本选择 1.查看数据库的版本 select @@version; 2.准备数据 网址:https://dev.mysql.c ...

  5. Android App优化之ANR详解

    引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App ...

  6. 市场活动课件:SQL Server 索引优化

    2014年1月12日,微软合作伙伴售前工程师俱乐部在珠海市联通大厦12楼会议室举办. 议题: 一. 侯钟雷:Sharepoint 2013无代码开发 二. 唐得琳:Excel 2013 新功能展示 三 ...

  7. SQL SERVER 索引优化——移除键查找(书签查找)或RID查找

    SQL SERVER 索引优化--移除键查找(书签查找)或RID查找 原创三空道人 最后发布于2018-12-21 16:45:27 阅读数 971  收藏 展开 SQL SERVER 索引优化 -- ...

  8. MySQL 索引失效详解

    MySQL 索引失效详解 一.MySQL索引失效原因汇总 隐式的类型转换,索引失效 查询条件包含or,可能导致索引失效 like通配符可能导致索引失效 查询条件不满足联合索引的最左匹配原则 在索引列上 ...

  9. 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解

    前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库.Tablestore在阿里云官网上有各种文档介绍,也发布了很多场景案例文章,这些文 ...

最新文章

  1. Java 责任链模式
  2. svn报错:“Previous operation has not finished; run 'cleanup' if it was interrupted“ 的解决方法...
  3. 零拷贝和java NIO
  4. C#中Equals和==的比较
  5. The server sent a disconnect packet.Received ieof for nonexistent channel 0. (code: 2)
  6. Anaconda更新源失败
  7. 2_RabbitMQ工作模式_Work queues_Publish/Subscribe_Routing_Topics_HeaderRpc
  8. 利用PHP安装windows自动运行的服务,PHP程序可以实现长时间、自动运行、定时更新功能,直接可以用在项目中的类源代码...
  9. Windows Server 2016-Windows控制台的新增功能
  10. tensorflow 安装_安装tensorflow-gpu 2.0
  11. MFC中onmouseover与onmousemove的区别
  12. RMAN 总括 组成 配置 检测
  13. ARM开发7.3.3 基础实训( 3 ) 独立式键盘的输入系统设计--LPC21XX
  14. python里如何打开文件_python如何打开一个txt文件
  15. 7 EXCEL常用快捷键
  16. 可能是最好用的单文件制作工具jexchan下载 | 含jexchan单文件制作工具使用详细教程
  17. 资源管理器计算机目录,资源管理器可以以什么方式显示计算机内所有文件的详细图表...
  18. matlab三维地形显示,三维地形可视化的MATLAB实现_张林泉
  19. 2022 最新华为面经分享:Java 高分面试指南
  20. 修改文件后是否需要重启服务器

热门文章

  1. Linux.date命令详解
  2. Go语言代码实现数字签名过程
  3. 《分形算法与程序设计》目录
  4. C++,一球从某一高度落下(整数,单位是米),每次落地后跳回原来高度的一半,再落下。编程计算球在第5次落地时,共经过多少米?第5次反弹多高?【多组输入】
  5. OSI模型及数据封装过程
  6. Charles软件破解方法
  7. 过去分词表完成或者被动完成
  8. IO进程——系统IO与文件IO
  9. alibabaprotect 是危险的有害的顽固的病毒般的存在
  10. 如何通俗理解并快速写出麦克斯韦方程组?