展开菜单

这种sql写法会导致索引失效?

网上经常能看到一些文章总结在 mysql 中不能命中索引的各种情况,其中有一种说法就是指使用了 or 的语句都不能命中索引。 这种说法其实是不够正确的,正确的结论应该是,从 mysql5.0 后,如果在 or 连接的字段上都有独立的索引的话,是可以命中索引的,这里就是用到了 index_merge 特性。 在 mysql5.0 版本以前一条 sql 只能选择使用一个索引,而且如果 sql 中使用了 or 关键字,那么已有的索引就会失效,会走全表扫描。因为无论走哪个索引,mysql 都不能一次性查找出符合条件的数据,所以只能放弃索引。...

mysql为什么建议使用自增主键

前面我写了几篇关于 mysql 索引的文章,索引是 mysql 非常重要的一部分。你也可能经常会看到一些关于 mysql 军规、mysql 查询优化的文章,其实这些操作的背后都是基于一定的原理的,你要想明白这些原理,首先就得知道 mysql 底层的一些东西。 我在这里举几个例子吧。 我们都知道表的主键一般都要使用自增 id,不建议使用业务 id ,是因为使用自增 id 可以避免页分裂。这个其实可以相当于一个结论,你都可以直接记住这个结论就可以了。 但是如果你要弄明白什么是页分裂,或者什么情况下会页...

你写的二分法可能有个bug

你写的二分法可能有个bug

在公众号里写了有 80 多篇原创文章了,大家大多都是利用碎片时间来阅读公众号文章,所以我后面的文章也尽量使用更通俗、更简短的文字。 今天要聊的是二分查找法,也被称作对半查找法,是一种非常高效的查找搜索算法。使用二分查找算法有几个前提,一个就是你的数据得是有序的,如果不是有序,那就需要先排序。 其实任何一种算法,都是基于某种数据结构的,二分法适用于保存在数组中的数据,像使用链表数据结构保存的数据都不适合使用二分法。 这是使用二分法的两个比较大的前提,你先知道就好了,下面再做解释。 在二分...

聊聊和钱相关的

这篇文章聊聊和钱相关的话题,在这里,我希望除了技术和代码,还应该有一些和金钱相关的东西,毕竟不管你是做什么技术、写什么样的代码、从事什么工作,最终最重要的目的绝大多数都离不开钱。 而每当谈到钱,大多数人又是含蓄的,至少我是这样的,我自己有必要刻意改变这一点。 经济关系其实是人与人之间的基础关系之一,小时候我总被教育你只要好好学习,不用关心钱和赚钱的事情,尽管家里很穷很困难,我当然不是在批评父母的教育方式,我只不过是在陈述一个事实。 我想我将来应该不会再以这种方式去教育我的孩子,让孩子早一点懂得和金钱相关...

如何分析一条sql的性能

这篇文章将给大家介绍如何使用 explain 来分析一条 sql 。 网上其实已经有非常多的文章都很详细的介绍了 explain 的使用,这篇文章将实例和原理结合起来,尽量让你有更好的理解,相信我,认真看完你应该会有特别的收获。 explain 翻译过来就是解释的意思, 在 mysql 里被称作执行计划,即可以通过该命令看出 mysql 在经过优化器分析后决定要如何执行该条 sql 。 说到优化器,再多说一句,mysql 内置了一个强大的优化器,优化器的主要任务就是把你写的 sql 再给优化一...

字符串匹配算法基础版

字符串匹配算法基础版

最近小谭又被问了一个问题,编程语言中的字符串匹配函数是怎么实现的,是啥原理。 看来大猫又要展示他靠才华吃面的大招了。 小谭一边心里犯嘀咕,这还能有啥原理,直接用不就行了,管那么多干啥,一边对大猫说,今天又想要吃啥面了。 大猫就是这样,经常问你一个问题,你要不会,然后让你请他吃碗面,他给你讲清楚。 大猫腼腆一笑表示今天吃一碗拉面就行,估计是今天这个大招的技术含量不够高吧,一碗拉面就给应付了。 果然,大猫仅用 5 个字就形容了他的大招,暴力匹配法,小谭一听暴力法,...

mysql删除操作其实是假删除

在 InnoDB 中,你的 delete 操作,并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记,标记为删除,因此你使用 delete 删除表中的数据,表文件在磁盘上所占空间不会变小,我们这里暂且称之为假删除。 上面这个是结论,我们可以通过一个例子来验证下。 沿用前面文章中的例子吧,先创建一个存储过程,插入 10w 条数据,然后看下这 10w 条数据占了多大的空间。 CREATE TABLE `t` (   `id` int(11...

python自动下载高品质无损歌曲

python自动下载高品质无损歌曲

不知道大家有没有这样的感觉,听到一些好听的歌曲,总是想要把歌曲下载到自己电脑或手机上才感觉到踏实,尤其是在早些年智能手机还没这么普及的时候,喜欢的歌曲不在自己电脑上就会没有安全感。 虽然现在听歌基本都是在线听,下载歌曲到本地的意识越来越淡了,但对于一些高品质无损音乐,依然还是有想要下载的冲动,所以今天我们就来使用 python 来解一解这个下载情结。 不清楚大家平常都用什么听歌 APP,我最常用的就是网易云音乐,刚开始就是被其个性推荐算法圈粉了,推荐的都是自己喜欢的歌曲,但因为版权问题,总有一些歌曲不得不去 QQ 音乐上去听。 ...

python采集链家二手房信息

python采集链家二手房信息

都说现在的房价很高,具体有多高呢,我们一起来看看。 现在网上关于房子的价格以及交易信息鱼龙混杂,与实际情况相差比较大,目前链家平台的数据应该是相对比较可靠的,所以这次我们就打算去链家爬一爬。 说到爬虫,前面也有说过,无非就三个主要的步骤 1、获取目标网页或接口 2、从目标网页或接口中解析并提炼出你要的数据字段 3、数据保存 我们今天就以链家平台上北京地区二手房为例,首先是打开目标网页。 https:/...

听说mysql还会选错索引

大家都知道,mysql 一个表中可以创建多个索引,但是在执行一条查询语句的时候,mysql 只能选一个索引,如果我们没有指定 mysql 使用某个索引,那么就是由 mysql 的优化器来决定要使用哪个索引了,然而,mysql 也是会有选错的时候。 前面的文章,我们有介绍过执行一条查询 sql 语句分别会经历那些过程,执行一条sql语句都经历了什么? 存在多个索引的情况下,优化器一般会通过比较扫描行数、是否需要临时表以及是否需要排序等,来作为选择索引的判断依据。 我们先来新建一个表,创建两个普通索引。 C...

介绍一个好玩的

介绍一个好玩的

马上就要放假了,这几天就暂时不写技术文章了,给大家介绍一个好玩的网站。 国外一个 JavaScript 编程比赛平台,该比赛一年举办一次,你可以使用一段 JavaScript 代码实现一个动画,一个小工具,也可以是一个小游戏等,总之随你自由发挥,但要求 JavaScript 代码大小不能超过 1kb。 先来看几个 demo 吧,就随便挑几个看看。 ...

如何让mysql索引更快一点

在 InnoDB 中,从二级索引回到主键索引查询数据,这个过程称作回表过程,而且这个回表过程是可以被优化的,这个优化就是利用覆盖索引。 先说结论,如果一个索引的字段包含了所有要查询的字段,这个索引就称作覆盖索引,覆盖索引可以减少回表过程,能有效提高查询效率。 前面我们有说过,在 InnoDB 中数据都是保存在 B+ 树上,主键索引保存了整行记录,二级索引保存了主键的值。 一次查询操作,要么是遍历主键索引,要么是遍历二级索引,要么就是先遍历二级索引得到主键 id 的值,然后再到主键索引上通过主键...