我試圖運行此查詢SQL查詢花費很長的時間
SELECT DISTINCT
t.class_name,
t.class_code,
@UTCTimeNow,
@Username
FROM
tblimport_n t
LEFT JOIN classmaster_n cm ON t.class_code = cm.classcode
WHERE
cm.classcode IS NULL
但這服用(分鐘之間7-8)這麼久。這是當前狀態
tblImport包含27K記錄
tblImport對class_code全文索引
classmaster_n包含27K記錄
classmaster_n對classcode
指數是它採取了大量的時間?我懷疑!
將來這兩張表可以有10萬條記錄!我害怕這個結果!
編輯:
什麼我試圖得到的是,一切從tblImport
的記錄,這些都不是在classmaster_n
。
其實我想插入數據庫中尚不存在的所有類。我將使用此查詢來插入記錄。
EDIT 2
改變FULLTEXT
在tblImport
_n表中的索引類型普通索引
解釋我的查詢顯示該
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t ALL (NULL) (NULL) (NULL) (NULL) 27071
1 SIMPLE cm index (NULL) i_Classmaster_Classcode 202 (NULL) 27251 Using where; Using index; Not exists
tblImport_n
CREATE TABLE `tblimport_n` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`SCHOOL_CODE` varchar(50) DEFAULT NULL,
`SCHOOL_NAME` varchar(300) DEFAULT NULL,
`CLASS_CODE` varchar(50) DEFAULT NULL,
`CLASS_NAME` varchar(300) DEFAULT NULL,
`TEACHER_EMPLOYEE_CODE` varchar(50) DEFAULT NULL,
`TEACHER_TITLE` varchar(300) DEFAULT NULL,
`TEACHER_FIRSTNAME` varchar(300) DEFAULT NULL,
`TEACHER_MIDDLENAME` varchar(300) DEFAULT NULL,
`TEACHER_LASTNAME` varchar(300) DEFAULT NULL,
`TEACHER_EMAIL_ADDRESS` varchar(300) DEFAULT NULL,
`STAFF_CODE` varchar(300) DEFAULT NULL,
`STUDENT_CODE` varchar(50) DEFAULT NULL,
`STUDENT_FIRSTNAME` varchar(300) DEFAULT NULL,
`STUDENT_MIDDLENAME` varchar(300) DEFAULT NULL,
`STUDENT_LASTNAME` varchar(300) DEFAULT NULL,
`STUDENT_GRADE` varchar(300) DEFAULT NULL,
`STUDENT_GENDER` varchar(300) DEFAULT NULL,
`STUDENT_BIRTH_DATE` varchar(300) DEFAULT NULL,
`STUDENT_HOMEROOM` varchar(300) DEFAULT NULL,
`STUDENT_IEP_STATUS` varchar(300) DEFAULT NULL,
`STUDENT_LEP_STATUS` varchar(300) DEFAULT NULL,
`STUDENT_LEP_Year` varchar(300) DEFAULT NULL,
`STUDENT_RACE` varchar(300) DEFAULT NULL,
`STUDENT_LANGUAGE` varchar(300) DEFAULT NULL,
`STUDENT_NETWORK` varchar(300) DEFAULT NULL,
`STUDENT_ACCOMMODATIONS` varchar(300) DEFAULT NULL,
`DISTRICTID` int(10) DEFAULT NULL,
`TMD5hash` varchar(1500) DEFAULT NULL,
`SMD5hash` varchar(1500) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `i1` (`CLASS_CODE`),
KEY `i2` (`SCHOOL_CODE`)
) ENGINE=InnoDB AUTO_INCREMENT=32768 DEFAULT CHARSET=utf8
classmaster_n
CREATE TABLE `classmaster_n` (
`ClassId` int(11) NOT NULL AUTO_INCREMENT,
`ClassName` varchar(200) NOT NULL,
`ClassCode` varchar(200) NOT NULL,
`CreatedDate` datetime DEFAULT NULL,
`CreatedUser` varchar(100) DEFAULT NULL,
`UpdatedDate` datetime DEFAULT NULL,
`UpdatedUser` varchar(100) DEFAULT NULL,
PRIMARY KEY (`ClassId`),
KEY `i_Classmaster_Classcode` (`ClassCode`)
) ENGINE=InnoDB AUTO_INCREMENT=35094 DEFAULT CHARSET=latin1
編輯3
我想我做到了!
我剛剛將tblImport_n.Class_Code
更改爲非空列,查詢僅用了27秒!
我還在測試所有的情況下...
什麼是@ UTCTimeNow和@ @用戶名? –
您正在使用cm.classcode加入,但要求cm.classcode爲空?我猜這是一個表掃描。你能說更多關於你想要做什麼嗎?> – asantaballa
你確定你需要一個'代碼'的FULLTEXT索引。這似乎很奇怪。 – Strawberry