索引表列

时间:2013-01-07 07:51:32

标签: mysql indexing xampp innodb

我正在开发一个应用程序,我从程序创建查询字符串并将其传递给包含四个Prepared statements的存储过程。传递变量后,语句如下,

DROP TABLE IF EXISTS tbl_correlatedData;

CREATE TABLE tbl_correlatedData 
SELECT t0.*,t1.counttimeStamplocalIp,t2.countlocalPort,t3.countlocalGeo,t4.countisp,t5.countforeignip,t6.countforeignPort,t7.countforeignGeo,t8.countinfection 
FROM tbl_union_threats t0 
LEFT JOIN tbl_tsli t1 
USING (timeStamp,localIp) LEFT JOIN tbl_tslilp t2 USING (timeStamp,localIp,localPort) 
LEFT JOIN tbl_tslilplg t3 
USING (timeStamp,localIp,localPort,localGeo) 
LEFT JOIN tbl_tslilplgisp t4 
USING (timeStamp,localIp,localPort,localGeo,isp) 
LEFT JOIN tbl_tslilplgispfi t5 
USING (timeStamp,localIp,localPort,localGeo,isp,foreignip) 
LEFT JOIN tbl_tslilplgispfifp t6 
USING (timeStamp,localIp,localPort,localGeo,isp,foreignip,foreignPort) 
LEFT JOIN tbl_tslilplgispfifpfg t7 
USING (timeStamp,localIp,localPort,localGeo,isp,foreignip,foreignPort,foreignGeo) 
LEFT JOIN tbl_tslilplgispfifpfginf t8 USING (timeStamp,localIp,localPort,localGeo,isp,foreignip,foreignPort,foreignGeo,infection)
GROUP BY timeStamp,localIp;

ALTER TABLE tbl_correlatedData 
MODIFY timeStamp VARCHAR(200) NOT NULL, 
MODIFY localIp VARCHAR(200) NOT NULL, 
MODIFY localPort VARCHAR(200) NOT NULL, 
MODIFY localGeo VARCHAR(200) NOT NULL, 
MODIFY isp VARCHAR(200) NOT NULL, 
MODIFY foreignip VARCHAR(200) NOT NULL, 
MODIFY foreignPort VARCHAR(200) NOT NULL, 
MODIFY foreignGeo VARCHAR(200) NOT NULL, 
MODIFY infection VARCHAR(200) NOT NULL;

CREATE INDEX id_index ON tbl_correlatedData (timeStamp,localIp,localPort,localGeo,isp,foreignIp,foreignPort,foreignGeo,infection);

但是当进程进入索引查询时,它会发出错误消息

Incorrect key file for table 'tbl_correlateddata'; try to repair it

仅供参考: 我正在使用xampp服务器在驱动器上使用19 GB的可用空间在Windows Vista 32位上尝试此操作,并且创建的表在phpMyadmin上显示其大小为25Mb。

修改 当我尝试使用REPAIR TABLE tbl_correlateddata修复它时,会发出以下内容,

Table                                |  Op    | Msg_type |  Msg_text
-----------------------------------------------------------------------------------------------------------------
db_threatanalysis.tbl_correlateddata |  repair| Error    |  Table 'db_threatanalysis.tbl_correlateddata' doesn...
db_threatanalysis.tbl_correlateddata |  repair| status   |  Operation failed

非常感谢你的帮助......提前:)

1 个答案:

答案 0 :(得分:1)

对于innodb表,

索引键前缀最多可达767个字节,myisam表约为1000个字节

mysql innodb的总索引长度是3072

首先,您只需检查索引的长度,如果可能的话,减少所有的列大小varchar(100)

如果可能的话,创建单独的索引(如果它符合您的要求)

请参阅链接

http://dev.mysql.com/doc/refman/5.0/en//create-index.html

http://bugs.mysql.com/bug.php?id=6604