我想知道是否有人在MySQL文档中找到确认,对于InnoDB,允许索引中为NULL的列需要额外的一个字节?不允许NULL:SMALLINT UNSIGNED NOT NULL的同一列;索引将按其应有的-2字节。UPD:我在docs中发现了这一点:“由于密钥存储格式,可以为空的列的键长度比非空列的键长度要大。”但是,我仍然不明白,索引<
我有一个包含超过一百万行的表和一个执行良好的select查询,直到我不得不进行模式更改,使order by子句中使用的列接受空值。该列一直被编入索引。唯一的变化是它现在允许空值。类似于order by id desc,其中id是一个无符号的大整数,并被索引并缺省为NULL。
删除这个列上的索引可以解决这个问题,但是我还不能理解导致这个问题的根本原因。
所以问题是,在处理存储过程中传入的NULL查询参数时,有没有可能避免完全扫描?假设我有4个参数,用户从表单中发送,并尝试在表中查找精确匹配,如下所示:FROM table1 t1((:qParam2 is null) OR (t1.col2 = :qParam2)) AND((:qParam4 is null) OR (t1.col4 = :qParam4));
因