mysql查询中in和多个or的区别?
多数据库服务器都只把IN()看作多个OR的同义词,因为它们在逻辑上是相等的。
MYSQL不是这样的,它会对IN()里面的数据进行排序,然后用二分法查找个是否在列表中,这个算法的效率是O(Logn),而等同的OR子句的查找效率是O(n)。
在列表很大的时候,OR子句就会变得慢得多。
数据库中in是什么意思?
在MySQL中,IN是一个运算符,用于判断表达式的值是否位于给出的列表中。当表达式的值与列表中的任何一个值相匹配时,返回值为1;否则,返回值为0。IN运算符可以用于SELECT、UPDATE或DELETE语句中的WHERE子句。
mysql in会使用索引吗?
当你source字段唯一性不高,例如你90w数据,里面source字段来来去去就那么十几个值,这种情况下影响结果集巨大,就会全表扫描。这种情况全表扫描还要快于利用索引,只要理解索引的本质不难明白MySQL为何不使用索引。
极端点的情况,90万的数据,source只有0和1两个值,利用索引要先读索引文件,然后二分查找,找到对应数据的数据磁盘指针,再根据读到的指针再读磁盘上对应的数据数据,影响结果集45万。这种情况,和直接全表扫描那个快显而易见。
如果你source字段是一个unique,就会用到索引。
如果你一定要用索引,可以用force index,不过效率不会有改善一般还会更慢就是了。