SQL 查询优化之虚拟列
虚拟列
虚拟列:虚拟列是不保存在磁盘中的,仅在获取的时候根据存储在磁盘中的列计算,组合获取。虚拟列可以创建索引,可以收集统计信息。创建虚拟列的语法是:column datatype(generated always) as (exp) virtrual,在定义虚拟列时没有指定数据类型则默认使用虚拟列表达式里面返回的值的数据类型,虚拟列的值不能是哦那个update和insert操作来更新,其...
2019-01-05 02:10:43 |
SQL
优先级队列与堆排序 PriorityQueue & heap sort
优先级队列
不同于先进先出队列,其对每一个元素指定了优先级,一般情况下,出队时,优先级越高的元素越先出队。
问题
题目
实现一个优先级队列,此队列具有enqueue(val,prior)和dequeue()两种操作,分别代表入队和出队。
其中enqueue(val,prior)第一个参数val为值,第二个参数prior为优先级(prior越大,优先级越高),优先级越高越先出队
d...
2019-01-04 07:24:22 |
Althgorim
位图法对大量整数进行排序
问题
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7。如果在输入文件中有任何正数重复出现就是致命错误。没有其他数据与该正数相关联。
输出:按升序排列的输入整数的列表。
约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化。
这是《编程珠玑》中很有意思的一个问题。今天给大家分享一下并附上自己的代...
2019-01-03 00:25:22 |
Althgorim
主键和外键
主键
概念
学生表(学号,姓名,性别,班级) 学号是一个主键
课程表(课程号,课程名,学分) 课程号是一个主键
成绩表(学号,课程号,成绩) 学号和课程号的属性组构成一个主键
成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键
定义
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键
以一个关系的外键作主...
2019-01-02 02:17:00 |
SQL
数据库索引-13-实际工作中的索引优化
mysql 的分页优化
现象
mysql learn-01-mysql limit 的分页性能很差问题及其解决方案
解决方案
返回给前端对应的 lastId
然后通过 lastId 做对应的主键过滤,子查询。
id 走的是主键聚合索引,会比较快。
优化方案1
SELECT * FROM tableName
WHERE id >= (SELECT id FROM tabl...
2019-01-02 02:17:00 |
SQL
数据库索引-11-Mysql 索引执行流程 主键索引 普通索引 组合索引+最左匹配原则 覆盖索引+索引下推
MySQL 的索引是如何执行的?
B+ 树在具体的引擎中是怎么发挥作用的呢?
本系列主要说一下 InnDB 索引。
主键索引
主键索引又叫聚簇索引,它使用 B+ 树构建,叶子节点存储的是数据表的某一行数据。
当表没有创建主键索引是,InnDB 会自动创建一个 ROWID 字段用于构建聚簇索引。
规则如下:
在表上定义主键 PRIMARY KEY,InnoDB 将...
2019-01-02 02:17:00 |
SQL
数据库索引-11-Mysql 为什么选择 B+ Tree 作为索引?
索引概述
定义:索引是存储引擎用于快速找到记录的一种数据结构。
举例说明:如果查找一本书中的某个特定主题,一般会先看书的目录(类似索引),找到对应页面。
在MySQL,存储引擎采用类似的方法使用索引,高效获取查找的数据。
索引的优缺点
优点
提高查询语句的执行效率,减少 IO 操作的次数
创建唯一性索引,可以保证数据库表中每一行数据的唯一性
加了索引的列会进行排序(一本书的章...
2019-01-02 02:17:00 |
SQL
数据库索引-10-Mysql count(*),count(字段),count(1)的区别
总数 count
select count(*)应该是一个比较常用的语句,用来统计记录行数。
但是,慢慢地你会发现,这个语句越来越慢了,为什么呢?
count 的常见问题
关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT。
但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。
不信的话请尝试回答...
2019-01-02 02:17:00 |
SQL