当前位置: 首页 > 面试题库 >

SQL:SELECT IN更快和最佳实践?

端木令
2023-03-14
问题内容

如果即时通讯使用2个查询:

首先:查询所需的所有键/ ID

第二个:从tab1中选择*,其中tab1.id在(… ids列表.. ,,)中

id列表可以是几千个…

这样做是明智的选择还是最佳实践?


问题答案:

通常,在语句中使用IN子句是完全可以接受的最佳实践…假设您对更大的值集使用子查询。

答案应该永远是: 取决于
!从您的问题尚不清楚,您的值列表将是SELECT还是对它们进行硬编码。如果那几千个值位于另一个表(临时表或表变量)中,并且您对其进行了子查询,那肯定会更有性能。IE

    SELECT * FROM Customer 
    WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers)
  • 执行该IN子句的那列的索引编制得如何?
  • 数据类型是什么?如果是数字数据类型,那么您应该不会有任何性能问题。
  • 确保您的STATISTICS(如果是SQL Server)定期更新。
  • 如果数据类型是基于char或guid的,则可能会遇到一些性能问题,尤其是当您同时运行多个查询时,并且如您所描述的那样,列表成千上万。
  • 考虑JOIN改用这些表;那应该总是产生更快的查询。

    SELECT * FROM Customer AS C
    INNER JOIN MyOtherLargeTableOfCustomers AS M
    ON C.CustomerID = M.CustomerID



 类似资料:
  • 想改进这个问题吗 通过编辑此帖子,更新问题,使其仅关注一个问题。 我在这里有一个小循环,我想知道我是否犯了一些大错误。 例如,有没有办法以不同的方式重写它的一部分,使矢量化成为可能(假设GCC4.8.1和所有矢量化友好标志启用)? 这是传递列表数字的最佳方式吗(常数浮点数name_of_var[])? 代码的思想是获取一个向量(在数学意义上,不一定是std::向量),该向量由(未排序的数字)和两个

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给

  • 本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。

  • 适当的使用vuex 能不用就不用。 能用就用。 不要为了使用而使用,一个小方法里面有5个设计模式。 不要过度使用CSS框架 因为CSS框架一般会大幅度增加文件体积。 例如 bootstrap, ele.me前端框架。 这个在低端安卓机上影响显著。 使用CDN来存放js, css, 和图片文件。 灵活使用第三方Vue 插件 例如: 轮播图, 表单验证等等。这些轮子都是现成的。 前端逻辑务必简单 能在