相关疑难解决方法(0)

MYSQL或vs IN性能

我想知道下列之间在性能方面是否有任何差异

SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4)

SELECT ... FROM ... WHERE someFIELD between  0 AND 5

SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ... 
Run Code Online (Sandbox Code Playgroud)

或者MySQL会像编译器优化代码一样优化SQL吗?

编辑:由于评论中陈述的原因,将's 更改为AND's OR.

mysql sql optimization performance

169
推荐指数
7
解决办法
7万
查看次数

SQL Server:在vs中选择还是?

哪个更快?

SELECT UserName
FROM dbo.UserTable
WHERE UserID in (1,3,4)
Run Code Online (Sandbox Code Playgroud)
SELECT UserName
FROM dbo.UserTable
WHERE UserID = 1 
      OR UserID = 3
      OR UserID = 4
Run Code Online (Sandbox Code Playgroud)

sql-server performance inline

20
推荐指数
2
解决办法
1万
查看次数

JPA条件API将'in'表达式转换为多个'OR'

具有'in'表达式的JPA条件API转换为多个'OR'而不是'in'

例如

我的主要模特

public class Person {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "department_id")
    private Department department;

    ...
}
Run Code Online (Sandbox Code Playgroud)

多对一的关系

public class Department {
    @Id
    @Column(name="department_id")
    private Integer departmentId;

    @OneToMany(mappedBy="department")
    private List<Person> person;

    ...
}
Run Code Online (Sandbox Code Playgroud)

在persistence.xml中定义了这两个模型(注意:它没有指定任何db方言)

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="primary" transaction-type="JTA">

        <jta-data-source>java:openejb/Resource/jdbc/myDS</jta-data-source>

        <class>com.xyz.Person</class>
        <class>com.xyz.Department</class>
        ...

        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

        <properties>
            <property name="openjpa.Log" value="${open.jpa.log}" />
            <property name="openjpa.ConnectionFactoryProperties" value="printParameters=true" />
            <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
        </properties>
    </persistence-unit>

</persistence>
Run Code Online (Sandbox Code Playgroud)

以下是使用Criteria API构建查询的代码:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> criteriaQuery = cb.createQuery(Person.class);
Root<Person> personRoot = criteriaQuery.from(Person.class); …
Run Code Online (Sandbox Code Playgroud)

java jpa openjpa

10
推荐指数
1
解决办法
945
查看次数

使用IN子句与多个SELECT

我想知道哪些更快(性能方面)查询(在MySQL 5.x CentOS 5.x上,如果这很重要):

SELECT * FROM table_name WHERE id=1;
SELECT * FROM table_name WHERE id=2;
.
.
.
SELECT * FROM table_name WHERE id=50;
Run Code Online (Sandbox Code Playgroud)

要么...

SELECT * FROM table_name WHERE id IN (1,2,...,50);
Run Code Online (Sandbox Code Playgroud)

我有大约50 id秒来查询.我知道通常数据库连接很昂贵,但我已经看到这个IN条款不是那么快[有时].

php mysql

6
推荐指数
1
解决办法
2489
查看次数

Oracle的SQL性能调优很多OR vs IN()

我手边没有"解释计划".你能帮忙说出以下哪项更有效率吗?

选项1:

select ... 
    from VIEW_ABC 
    where STRING_COL = 'AA' 
       OR STRING_COL = 'BB' 
       OR STRING_COL = 'BB' 
       OR ...
       OR STRING_COL = 'ZZ'
Run Code Online (Sandbox Code Playgroud)

选项2:

select ... 
    from VIEW_ABC 
    where STRING_COL IN ('AA','BB',...,'ZZ')
Run Code Online (Sandbox Code Playgroud)

sql oracle performance

5
推荐指数
2
解决办法
1万
查看次数

MySQL Views OR vs IN子句

MySQL服务器版本:5.1.41在Ubuntu 10.04上

我在修改一些查询时想到了MySQL的行为,并且想知道它的原因.

基本上我正在创建一个视图.当我查询视图时,结果集是相同的但是,对于IN子句而言,读取的行数与子句不同OR.下面是一个简单的例子:

CREATE TABLE country ( 
    id_country int(11) NOT NULL AUTO_INCREMENT, 
    name varchar(50) NOT NULL, 
    PRIMARY KEY (id_country) 
) ENGINE=InnoDB; 

INSERT INTO country (name) VALUES ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'); 

CREATE TABLE status ( 
    id_status int(11) NOT NULL AUTO_INCREMENT, 
    id_country int(11) NOT NULL, 
    status tinyint(4) NOT NULL, 
    PRIMARY KEY (id_status) 
) ENGINE=InnoDB; 
ALTER TABLE status ADD INDEX ( id_country ); 
ALTER TABLE status ADD FOREIGN KEY ( id_country ) REFERENCES test.country …
Run Code Online (Sandbox Code Playgroud)

mysql views

5
推荐指数
1
解决办法
249
查看次数

使用不同的参数多次运行相同的选择查询

我有一个 Java 程序,它需要遍历 aHashMap来获取一个参数,然后用于查询 MySQL 数据库。

代码如下:

Iterator<Entry<String, Double>>it = ws.entrySet().iterator();
Connection con = null;

while(it.hasNext())  
{
    Entry<String, Double>pairs = it.next();
    PreparedStatement ps = con.prepareStatement("select doc_freq from lookup where word=?");
    ps.setString(1, pairs.getKey());
    ResultSet rs = ps.executeQuery();
}
Run Code Online (Sandbox Code Playgroud)

为循环的每次迭代(大约 500 次)重复访问数据库的过程减慢了我的应用程序。有什么办法可以一次发送所有这些参数,以便我只访问数据库一次?

java mysql select jdbc prepared-statement

5
推荐指数
1
解决办法
2847
查看次数

长查询字符串会影响速度吗?

假设我有一个很长的查询字符串,例如.

SELECT id from users where collegeid='1' or collegeid='2' . . . collegeid='1000' 
Run Code Online (Sandbox Code Playgroud)

它会以任何方式影响速度或输出吗?

SELECT m.id,m.message,m.postby,m.tstamp,m.type,m.category,u.name,u.img 
from messages m 
join users u on m.postby=u.uid 
where m.cid = '1' or m.cid  = '1' . . . . . . 
or m.cid = '1000'. . . . 
Run Code Online (Sandbox Code Playgroud)

mysql sql optimization performance

5
推荐指数
1
解决办法
296
查看次数

Scala slick:在多列上使用“in”进行过滤

假设我有以下表结构:

create table PEOPLE (
    ID integer not null primary key,
    NAME varchar(100) not null
);

create table CHILDREN (
    ID integer not null primary key,
    PARENT_ID_1 integer not null references PERSON (id),
    PARENT_ID_2 integer not null references PERSON (id)
);
Run Code Online (Sandbox Code Playgroud)

我想生成每个父母的姓名列表。在光滑的我可以写这样的东西:

for {
  parent <- people
  child  <- children if {
    parent.id === child.parent_id_1 ||
    parent.id === child.parent_id_2
  }
} yield {
  parent.name
}
Run Code Online (Sandbox Code Playgroud)

这会生成预期的 SQL:

select p.name
from people p, children c
where p.id = c.parent_id_1 or p.id …
Run Code Online (Sandbox Code Playgroud)

scala slick slick-3.0

5
推荐指数
1
解决办法
1278
查看次数

在ORACLE IN子句中使用元组,并在元组中使用一个元素的条件

我在这里看到很多关于在IN子句中使用元组的问题.我的情况与其他情况略有不同.IN子句中元组的一般用法如下所示

    Select * from MY_TABLE
    where (id,name,date) IN ((1,'new','10-JUL-13'),(2, 'old','09-JUN-13'))
Run Code Online (Sandbox Code Playgroud)

考虑到上述查询,我​​的要求是检索具有id和name值的记录以及特定范围内的日期.我们说吧

    effectiveDate <= date <= termDate  
Run Code Online (Sandbox Code Playgroud)

我正在使用ORACLE数据库和MyBatis ORM.我将数据作为对象列表获取,因此当我使用mybatis时,我可以使用foreach/for循环来填充元组,但是当我想使用条件来处理对象中的一个值时.

当我使用Mybatis从列表中读取一个值时,where子句如下所示

    <where>
        and (id,name) IN
   <foreach item="object" collection="data" open="(" separator=","close=")">
    (#{object.id},#{object.name})
   </foreach>
    </where>
Run Code Online (Sandbox Code Playgroud)

我也必须在循环中包含条件.

等待专家的建议.提前致谢.

sql oracle orm ibatis mybatis

3
推荐指数
1
解决办法
1万
查看次数

SQL中的多个IN子句

我不确定IN子句的功能,因此我想知道是否可以安全地运行查询。据我了解,在SQL Server中使用IN子句时会创建一系列OR语句:例如

SELECT * FROM table WHERE column IN (1, 2, 3, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

将与以下相同:

SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 OR column = 4 OR column = 5 OR column = 6
Run Code Online (Sandbox Code Playgroud)

但是,当执行这样的操作时会发生什么:

SELECT * FROM table WHERE column IN (1, 2, 3) and column2 IN (4,5,6) and column 3 IN (5,7,8)
Run Code Online (Sandbox Code Playgroud)

在这里我想知道,例如,如果第一个IN中的某个值在第二个IN中有两次出现,它将检索两个结果,还是按1、4和5的顺序执行(IN子句中的第一个值)

我想用8个参数运行查询,需要在数据库中检查(通过C#发送),但我不想用很多OR这样构建一个超大型查询(因为它将是+ 90k记录)

 SELECT * FROM table WHERE (column = 1 and column2 = 4 and …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server

0
推荐指数
1
解决办法
51
查看次数