首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL 进阶技巧(上)

现在我们要查出同时存在于两个表的员工,即田中和铃木,则以下用 IN 和 EXISTS 返回的结果是一样,但是用 EXISTS 的 SQL 会更快: -- 慢 SELECT * FROM Class_A...(SELECT * FROM Class_B B WHERE A.id = B.id); 为啥使用 EXISTS 的 SQL 运行更快呢,有两个原因 可以`用到索引,如果连接列 (id)...如何找出有销售记录的商品,使用如下 DISTINCT 可以: SELECT DISTINCT I.item_no FROM Items I INNER JOIN SalesHistory SH ON I.... item_no = SH. item_no; 不过更好的方式是使用 EXISTS: SELECT item_no FROM Items I WHERE EXISTS (SELECT...MAX(item) FROM Items; -- 这样写能用到索引 SELECT MAX(item_no) FROM Items; 注意:极值函数参数推荐为索引列中并不是不需要排序,而是优化了排序前的查找速度

1.1K20

Python与数据库的那些事

拿AVG函数来说,可以用来计算给定结果集的平均值: >>> cur.execute('''SELECT itemid, AVG(price) FROM BoughtItem GROUP BY itemid...也可以显示项目名称,而不是itemid⬇️ >>> cur.execute('''SELECT item.title, AVG(boughtitem.price) FROM BoughtItem as...比如可以使用此功能显示每个客户花费的总金额⬇️ >>> cur.execute('''SELECT customer.firstname, SUM(boughtitem.price) FROM BoughtItem...: 3, 'discounted': False}]} 写成SQL语句就是 SELECT firstname, boughtitems FROM customers WHERE firstname LIKE...因此,需要更快更直接的存储解决方案。 尽管这减少了服务器负载,但也给数据工程师,后端团队和DevOps团队带来了两个麻烦。首先,现在需要一个读取时间比主SQL或NoSQL数据库更快的数据库。

1.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 怎么用索引实现 group by?

    args[0] 为 i1 字段对应的 Item_field 类实例。 Item_sum_avg avg() 只有一个参数,为什么参数属性名是 args?...我们以 min() 为例介绍松散索引扫描的执行过程,示例 SQL 如下: select e1, min(i1) from t_group_by group by e1 词法分析 & 语法分析阶段,...如果松散索引扫描的成本比紧凑索引扫描的成本低,自然就要用松散索引扫描来提升 select 语句的执行效率了。 4.1 松散索引扫描成本更高怎么办?...松散索引扫描成本比紧凑索引扫描成本更高时,如果 select 语句中的聚合函数是 min()、max() 中的 1 ~ 2 个,就会使用紧凑索引扫描。...当松散索引扫描比紧凑索引扫描成本高时,min()、max() 会选择用紧凑索引扫描,MySQL 为 count(distinct)、sum(distinct)、avg(distinct) 引入松散索引扫描的变种

    6.7K60

    MySQL 怎么用索引实现 group by?

    args[0] 为 i1 字段对应的 Item_field 类实例。 Item_sum_avg avg() 只有一个参数,为什么参数属性名是 args?...我们以 min() 为例介绍松散索引扫描的执行过程,示例 SQL 如下: select e1, min(i1) from t_group_by group by e1 词法分析 & 语法分析阶段,...如果松散索引扫描的成本比紧凑索引扫描的成本低,自然就要用松散索引扫描来提升 select 语句的执行效率了。 4.1 松散索引扫描成本更高怎么办?...松散索引扫描成本比紧凑索引扫描成本更高时,如果 select 语句中的聚合函数是 min()、max() 中的 1 ~ 2 个,就会使用紧凑索引扫描。...当松散索引扫描比紧凑索引扫描成本高时,min()、max() 会选择用紧凑索引扫描,MySQL 为 count(distinct)、sum(distinct)、avg(distinct) 引入松散索引扫描的变种

    4.9K20

    SQL性能优化基础|技术创作特训营第一期

    ,其实是有挺多妙用的1、删除重复行上图中有三个句子,需要把这些重复的行给删掉,用如下自连接可以解决:图片2、排序在 db 中,我们经常需要按分数,人数,销售额等进行排名,有 Oracle, DB2 中可以使用...2、使用 EXISTS 代表 DISTINCT为了排除重复数据, DISTINCT 也会对结果进行排序,如果需要对两张表的连接结果进行去重,可以考虑用 EXISTS 代替 DISTINCT,这样可以避免排序...B.id;不过更好的方式是使用 EXISTS:SELECT item_no FROM Items IWHERE EXISTS (SELECT * FROM SalesHistory...SH WHERE I.item_no = SH.item_no);既用到了索引,又避免了排序对性能的损耗。...MAX(item) FROM Items; -- 这样写能用到索引 SELECT MAX(item_no) FROM Items;图片使用第二条语句效率更高,原因主要有两点使用 GROUP

    38620

    如何写出更快的 SQL (db2)

    下面我就自己的工作经验,分享一下如何写出更快的 SQL 一、查看执行计划来选择更快的 SQL 在写 SQL 的初期,你可能不知道到底是使用 UNION ALL 好还是 FULL JOIN 好,是使用 EXISTS...应避免使用Select * ,就算查询记录数,也不要使用 *,可以使用 select 1 from tablename 。...例子: (高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X’ FROM DEPT WHERE DEPT.DEPTNO =...(比如部门表和雇员表)的查询时,避免在SELECT 子句中使用 DISTINCT, 一般可以考虑用 EXIST 替换, EXISTS 使查询更为迅速,因为 RDBMS 核心模块将在子查询的条件一旦满足后...(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO (高效):

    2.2K20

    这个 MySQL 索引选择性有点意思!

    1.什么是前缀索引 所谓前缀索引说白了就是对文本的前几个字符(具体是几个字符在建立索引时指定)建立索引,这样建立起来的索引更小,所以查询更快。...首先我们可以通过如下 SQL 得到全列选择性: SELECT COUNT(DISTINCT column_name) / COUNT(*) FROM table_name; 然后再通过如下 SQL 得到某一长度前缀的选择性...: SELECT COUNT(DISTINCT LEFT(column_name, prefix_length)) / COUNT(*) FROM table_name; 在上面这条 SQL 执行的时候...以这里的 countrylanguage 表为例,我们首先来看 Language 全列选择性: SELECT COUNT(DISTINCT Language) / COUNT(*) FROM countrylanguage...然后再来看前缀为 8 的选择性: SELECT COUNT(DISTINCT LEFT(Language, 8)) / COUNT(*) FROM countrylanguage; ?

    1.4K30
    领券