Kirill
Новичок
mysql не использует primary
запрос:
EXPLAIN данного запроса:
+----+-------------+-------+----------+------------------+-----------------+---------+----------------------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+----------+------------------+-----------------+---------+----------------------+------+-----------------------+
| 1 | SIMPLE | p | system | PRIMARY | NULL | NULL | NULL | 1 | Using temporary |
| 1 | SIMPLE | a | fulltext | PRIMARY,fulltext | fulltext | 0 | | 1 | Using where |
| 1 | SIMPLE | c | ref | id_announcement | id_announcement | 4 | mir_portal.a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | u | eq_ref | PRIMARY | PRIMARY | 4 | mir_portal.a.id_user | 1 | Using where; Distinct |
+----+-------------+-------+----------+------------------+-----------------+---------+----------------------+------+-----------------------+
Почему таблица p (pref_partners) не использует первичный ключ, хотя у неё есть такой ключ?
show index from pref_partners;
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| mir_partners | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | |
| mir_partners | 0 | login | 1 | login | A | 1 | NULL | NULL | | BTREE | |
| mir_partners | 0 | email | 1 | email | A | 1 | NULL | NULL | | BTREE | |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
буду благодарен если кто укажет на явные ошибки в запросе, из-за которых возможны тормоза, предполагается что таблица pref_announcement будет очень большой (порядка 1000000 записей).
запрос:
Код:
SELECT
DISTINCT
a.id, a.name, a.main_text, a.phone, a.balance, a.id_unactive
FROM
pref_announcement a
INNER JOIN pref_announcement_cities c ON a.id=c.id_announcement
INNER JOIN pref_users u ON a.id_user=u.id
INNER JOIN pref_partners p ON u.id_partner=p.id
WHERE
MATCH(a.main_text) AGAINST ('"объявления брянкс"' IN BOOLEAN MODE)
AND a.is_offer='1'
AND c.id_city IN (2)
AND a.visible=1
AND a.is_active=1
AND a.balance>0
AND a.is_modering=1
AND u.visible=1
AND u.user_active=1
AND p.visible=1
+----+-------------+-------+----------+------------------+-----------------+---------+----------------------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+----------+------------------+-----------------+---------+----------------------+------+-----------------------+
| 1 | SIMPLE | p | system | PRIMARY | NULL | NULL | NULL | 1 | Using temporary |
| 1 | SIMPLE | a | fulltext | PRIMARY,fulltext | fulltext | 0 | | 1 | Using where |
| 1 | SIMPLE | c | ref | id_announcement | id_announcement | 4 | mir_portal.a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | u | eq_ref | PRIMARY | PRIMARY | 4 | mir_portal.a.id_user | 1 | Using where; Distinct |
+----+-------------+-------+----------+------------------+-----------------+---------+----------------------+------+-----------------------+
Почему таблица p (pref_partners) не использует первичный ключ, хотя у неё есть такой ключ?
show index from pref_partners;
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| mir_partners | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | |
| mir_partners | 0 | login | 1 | login | A | 1 | NULL | NULL | | BTREE | |
| mir_partners | 0 | email | 1 | email | A | 1 | NULL | NULL | | BTREE | |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
буду благодарен если кто укажет на явные ошибки в запросе, из-за которых возможны тормоза, предполагается что таблица pref_announcement будет очень большой (порядка 1000000 записей).