console.log(!1) // false
console.log(!0) // true
тут дело не в покрытии, а в том что идет поиск прямо в индексеЭто и называется "покрывающий индекс". Если размер записи индекса гораздо меньше размера всей строки, то MySQL может использовать индекс даже для неиндексного поиска (например, LIKE '%vasya%'). Ускорение достигается за счёт более плотного расположения данных в индексе, чем в самой таблице, и, соответственно, лучшего использования кэша диска.
EXPLAIN SELECT `a`, `b`
FROM `test`
WHERE `a` = 1 AND `b` = 1
UNION ALL SELECT `a`, `b`
FROM `test`
WHERE `a` = 1 AND `b` <> 1
UNION ALL SELECT `a`, `b`
FROM `test`
WHERE `a` <> 1 AND `b` = 1;
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| --- | ------------ | ------------ | ---------- | ----- | ------------- | ------ | ------- | ----------- | ---- | -------- | ------------------------ |
| 1 | PRIMARY | test | | ref | key_ab,key_ba | key_ab | 10 | const,const | 1 | 100 | Using index |
| 2 | UNION | test | | range | key_ab,key_ba | key_ab | 10 | | 9 | 100 | Using where; Using index |
| 3 | UNION | test | | range | key_ab,key_ba | key_ba | 10 | | 9 | 100 | Using where; Using index |
EXPLAIN SELECT `a`, `b`
FROM `test`
WHERE NOT(`a` <> 1 AND `b` <> 1);
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| --- | ----------- | ----- | ---------- | ----- | ------------- | ------ | ------- | --- | ---- | -------- | ------------------------ |
| 1 | SIMPLE | test | | index | key_ab,key_ba | key_ab | 10 | | 100 | 55 | Using where; Using index |
SELECT
(SELECT COUNT(*) FROM `table1` WHERE ...)
+(SELECT COUNT(*) FROM `table2` WHERE ...)
const foo = new Main;
foo.x // 10
Но у каждого экземпляра это поле будет иметь своё значениеconst foo = new Main;
const buz = new Main;
buz.x = 20;
foo.x // 10
buz.x // 20