가끔 내 쿼리가 인덱스를 사용하지 않지만 시간이 걸립니다. 왜 그런 일이 일어 났는지 설명 할 수 있니?MySQL에서 때때로 INDEX를 사용하지 않지만 때로는 수행합니다.
이것은 테이블 구조입니다. 첫 번째 쿼리가 인덱스를 치는 않지만, 두 번째는하지, 난 그 쿼리를 만든 유일한 변화가 STARTDATE 부분 출력 아래에서 볼 수 있듯이
MariaDB [crm]> desc vtiger_project;
+------------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| projectid | int(11) | NO | PRI | 0 | |
| projectname | varchar(100) | YES | | NULL | |
| projecttype | varchar(50) | YES | | NULL | |
| siteaddress | varchar(500) | YES | | NULL | |
| state | varchar(100) | YES | | NULL | |
| district | varchar(100) | YES | | NULL | |
| city | varchar(100) | YES | | NULL | |
| pincode | varchar(100) | YES | | NULL | |
| phone | varchar(100) | YES | | NULL | |
| startdate | date | YES | MUL | NULL | |
| branch | varchar(100) | YES | | NULL | |
| customer | int(11) | YES | MUL | NULL | |
| dealer | int(11) | YES | | NULL | |
| contractor | int(11) | YES | MUL | NULL | |
| architect | int(11) | YES | MUL | NULL | |
| carpenter | int(11) | YES | MUL | NULL | |
| productcategory | varchar(100) | YES | | NULL | |
| brand_preferred | varchar(100) | YES | | NULL | |
| formal_spec_check | varchar(3) | YES | | NULL | |
| formal_spec_details | varchar(250) | YES | | NULL | |
| projectstatus | varchar(25) | YES | | NULL | |
| project_reason_loosing | varchar(100) | YES | | NULL | |
| reason_loosing_deatils | varchar(250) | YES | | NULL | |
| reason_winning_deatils | varchar(250) | YES | | NULL | |
| adjustment | decimal(25,8) | YES | | NULL | |
| exciseduty | decimal(25,3) | YES | | NULL | |
| total | decimal(25,8) | YES | | NULL | |
| subtotal | decimal(25,8) | YES | | NULL | |
| taxtype | varchar(25) | YES | | NULL | |
| discount_percent | decimal(25,3) | YES | | NULL | |
| discount_amount | decimal(25,8) | YES | | NULL | |
| s_h_amount | decimal(25,8) | YES | | NULL | |
| currency_id | int(19) | NO | | 1 | |
| conversion_rate | decimal(10,3) | NO | | 1.000 | |
| actual_sale | varchar(255) | YES | | NULL | |
| expected_sale_in_na | varchar(255) | YES | | NULL | |
| primary_decision_maker | varchar(100) | YES | | NULL | |
+------------------------+---------------+------+-----+---------+-------+
. 내가 뭘 잘못 했니?
MariaDB [crm]> explain SELECT
-> COUNT(projectid)
-> FROM
-> vtiger_project
-> WHERE
-> 82582 IN (customer , contractor, architect, carpenter)
-> AND projectstatus NOT IN ('Supplied' , 'Closed As Complete', 'Closed As Lost')
-> AND actual_sale IS NULL
-> AND startdate > NOW()
-> ;
+------+-------------+----------------+-------+---------------+---------------+---------+------+------+------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+----------------+-------+---------------+---------------+---------+------+------+------------------------------------+
| 1 | SIMPLE | vtiger_project | range | startdate_idx | startdate_idx | 4 | NULL | 352 | Using index condition; Using where |
+------+-------------+----------------+-------+---------------+---------------+---------+------+------+------------------------------------+
1 row in set (0.00 sec)
MariaDB [crm]> explain SELECT
-> COUNT(projectid)
-> FROM
-> vtiger_project
-> WHERE
-> 82582 IN (customer , contractor, architect, carpenter)
-> AND projectstatus NOT IN ('Supplied' , 'Closed As Complete', 'Closed As Lost')
-> AND actual_sale IS NULL
-> AND startdate < NOW()
-> ;
+------+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | vtiger_project | ALL | startdate_idx | NULL | NULL | NULL | 15779 | Using where |
+------+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
쿼리 최적화 프로그램은 쿼리에 대해 가장 적합한 것으로 생각하는 작업을 수행합니다. 이는 쿼리가 쿼리에 도움이되지 않는 경우 인덱스가 사용되지 않는 경우가 있음을 의미 할 수 있습니다. –