SQL表中的create index显示没有定义索引

时间:2014-07-22 09:42:43

标签: mysql sql

我使用以下代码创建了一个表格,但是显示了警告

No index defined!

我使用以下SQL命令创建表

CREATE TABLE IF NOT EXISTS `test` (
`path` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

我使用以下PHP代码将多个图像路径插入到数据库中但每个路径都存储在新行中如何在SQL表中存储单行

if ($_FILES) {
$upload = new Upload_Rename();
$destination = 'upload';
$paths=$upload->multiple_files($_FILES['myfile'], $destination);

//Fill this with correct information
$mysql_hostname = "";
$mysql_user = "";
$mysql_password = "";
$mysql_database = "";
$tbl_name="";
$pathfield_name='path';
//
$mysql= new mysqli($mysql_hostname,$mysql_user,$mysql_password,$mysql_database);
foreach($paths as $path){
$query='INSERT INTO `'.$tbl_name.'` (id, `'.$pathfield_name.'`) VALUES ("'.$mysql- >escape_string($path).'");';
$mysql->query($query);}
$mysql->close();
}
?>

<form  method="post" enctype="multipart/form-data">
<?php for ($i = 0; $i < 10; $i++): ?>
file: <input type="file" name="myfile[]"><br>
<?php endfor; ?>
 <input type="submit">

3 个答案:

答案 0 :(得分:1)

  1. 如果在表上定义PRIMARY KEY,InnoDB会将其用作聚簇索引。

  2. 如果没有为表定义PRIMARY KEY,MySQL会选择第一个只有NOT NULL列作为主键的UNIQUE索引,而InnoDB将它用作聚簇索引。

  3. 如果表没有PRIMARY KEY或合适的UNIQUE索引,InnoDB会在包含行ID值的合成列内部生成隐藏的聚簇索引。行按InnoDB分配给此类表中的行的ID排序。行ID是一个6字节的字段,随着新行的插入而单调增加。因此,按行ID排序的行在物理上按插入顺序排列。

  4. 因此,在3的情况下,将创建合成索引。而这个警告只是提供了一个理解,即没有为表定义特殊索引,这可能导致将来出现排序问题,搜索e.t.c.查询。

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

答案 1 :(得分:0)

CREATE TABLE IF NOT EXISTS `test` (
`id` serial,
`path` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

答案 2 :(得分:0)

您的表中应该有一个PK作为A_I字段,这样可以提高查询/索引的性能。

CREATE TABLE IF NOT EXISTS `test` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`path` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

另外,路径只有50个字符,为什么你期望在1行中有多个路径?目的是什么?