$arr = ['account.ban', 'account.changePassword', 'account.getActiveOffers'];
$result = array_unique(array_merge(...array_map(function($el) { return explode('.', $el); }, $arr)));
var_dump($result);
/*
array(4) {
[0] => string(7) "account"
[1] => string(3) "ban"
[3] => string(14) "changePassword"
[5] => string(15) "getActiveOffers"
}
*/
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 ...)