Mysql SQL是如何工作的

Mysql SQL是如何工作的,mysql,sql,Mysql,Sql,例如,当我有这样一个字符串时: ABBBCSLAK**JDK**ASAAAAFJKDSKJFSDF SELECT * FROM table WHERE column LIKE '%JDK%' 当我像这样使用SQL时: ABBBCSLAK**JDK**ASAAAAFJKDSKJFSDF SELECT * FROM table WHERE column LIKE '%JDK%' 当服务器到达JDK时会发生什么?它是停止并执行SQL,还是遍历字符串的其余部分然后执行SQL 还有,当我的SQL语

例如,当我有这样一个字符串时:

ABBBCSLAK**JDK**ASAAAAFJKDSKJFSDF
SELECT * FROM table WHERE column LIKE '%JDK%'
当我像这样使用SQL时:

ABBBCSLAK**JDK**ASAAAAFJKDSKJFSDF
SELECT * FROM table WHERE column LIKE '%JDK%'
当服务器到达JDK时会发生什么?它是停止并执行SQL,还是遍历字符串的其余部分然后执行SQL

还有,当我的SQL语句中有多个与OR连接的LIKE子句时,会发生什么情况?当它是positive时,它会像子句一样首先停止吗

编辑: 我有这样的SQL。这可能是矫枉过正,但我们。。。每个变量都包含一个表列的LIKE子句循环。他们中间有“或”。我是否将这些“AND”改为“AND”或“or”没有任何区别

                     WHERE
                        ($countrySQL)
                            AND
                        ($schools_typeSQL)
                            AND
                        $schoolsSQL
                            AND
                        $schools_facultiesSQL
                            AND
                        $schools_classesSQL
                    ORDER BY

当然,这取决于数据库管理系统(DMBS)的实现

然而,大多数DBMS都是针对性能进行优化的,因此它们使用短路。也就是说,如果(a或B)中的一个参数为真,它将停止计算其余参数,因为它已经为真。对于(A和B)也是一样,如果A为false,则不需要检查B,因为整个表达式不能再为true

同样的情况也适用于LIKE操作员。如果已经找到匹配项,则无需继续检查字符串

除此之外: SQL是一种声明性的“语言”,因此,您不知道DBMS是否将其更改/优化为更好的语言(例如,首先检查另一列,因为DBMS对此列有索引)。

MySQL尝试通过预筛选行:

B-树索引特征
在使用
=
=
>=
的表达式中,B树索引可用于列比较。我确信MySQL不会做超出需要的事情:如果一行的条件为真,请查看下一行。索引不能用于这种搜索模式。对不起,你给我减号了吗?为什么人们会这样做?这是一个完全相关的问题,我没有。我只是在评论,并暗示了刹车的性能。但是没有人需要解释投票的原因。啊,对不起。我的错。我只是讨厌每次我在这里问一些问题时都看到那些反对票。我在业余时间编码。人们应该意识到这一点。谢谢你的回答和。。。我发现当我有多个子句“like1(exists)like2(notexists)like3(exists)”时,它返回表行。但是,当我像这样更改顺序“like 2(不存在)like 1(存在)like 3(存在)”时,不会返回该行。无论如何,有没有办法强迫服务器检查每个LIKE,这样每个LIKE子句都必须是正数?如果第1列像'aa'和第2列像'bb',那么这两个LIKE都必须匹配。我已经试过了,它不起作用。我将在一秒钟内编辑我的问题,以便如果您有空闲时间,您可以更详细地查看我的问题。:)