Php 具有大数据集的MySQL关系数据库?
我正在尝试访问共享一个公共“SpeciesName”字段的两个表中的数据 表“coords”是一个非常大的数据集,有5500多个条目,表本身有大约26个字段。此表的唯一ID是矩阵编号,从0到5500,每行包含稍微唯一的数据。但是,有多行具有相同的“SpeciesName”,表中只有446个唯一的“SpeciesName” 表“common”存储每个“SpeciesNames”的公共名称和图像数据,共有3个字段。基本上,我要做的是使用'SpeciesNames'作为外键在两个表之间建立MySQL关系,并在一个查询中访问这两个表中的数据 从哪里开始?谷歌搜索已经产生了处理包含一个或两个字段的表的结果。然而,当我查询时,我想从PHP中的两个表中选择所有字段。任何关于这方面的建议都会很好 编辑: 我知道目前的数据并不多,但会的!我本来应该更清楚的。这是“coords”:Php 具有大数据集的MySQL关系数据库?,php,mysql,sql,join,Php,Mysql,Sql,Join,我正在尝试访问共享一个公共“SpeciesName”字段的两个表中的数据 表“coords”是一个非常大的数据集,有5500多个条目,表本身有大约26个字段。此表的唯一ID是矩阵编号,从0到5500,每行包含稍微唯一的数据。但是,有多行具有相同的“SpeciesName”,表中只有446个唯一的“SpeciesName” 表“common”存储每个“SpeciesNames”的公共名称和图像数据,共有3个字段。基本上,我要做的是使用'SpeciesNames'作为外键在两个表之间建立MySQL关
`Authors` varchar(500) DEFAULT NULL,
`Journal` varchar(500) DEFAULT NULL,
`YearPublication` varchar(500) DEFAULT NULL,
`DOIISBN` varchar(500) DEFAULT NULL,
`AdditionalSource` varchar(500) DEFAULT NULL,
`Ecoregion` varchar(500) DEFAULT NULL,
`GrowthType` varchar(500) DEFAULT NULL,
`GrowthFormRaunkiaer` varchar(500) DEFAULT NULL,
`NumberPopulations` varchar(500) DEFAULT NULL,
`AnnualPeriodicity` varchar(500) DEFAULT NULL,
`CriteriaSize` varchar(500) DEFAULT NULL,
`CriteriaOntogeny` varchar(500) DEFAULT NULL,
`CriteriaAge` varchar(500) DEFAULT NULL,
`Kingdom` varchar(500) DEFAULT NULL,
`Phylum` varchar(500) DEFAULT NULL,
`AngioGymno` varchar(500) DEFAULT NULL,
`DicotMonoc` varchar(500) DEFAULT NULL,
`Class` varchar(500) DEFAULT NULL,
`_Order` varchar(500) DEFAULT NULL,
`Family` varchar(500) DEFAULT NULL,
`Genus` varchar(500) DEFAULT NULL,
`SpeciesName` varchar(500) DEFAULT 'NA',
`EnteredBy` varchar(500) DEFAULT NULL,
`EnteredDate` varchar(500) DEFAULT NULL,
`Source` varchar(500) DEFAULT NULL,
`SpeciesAuthor` varchar(500) DEFAULT NULL,
`StudiedSex` varchar(500) DEFAULT NULL,
`MatrixComposite` varchar(500) DEFAULT NULL,
`MatrixTreatment` varchar(500) DEFAULT NULL,
`MatrixCaptivity` varchar(500) DEFAULT NULL,
`MatrixStartYear` varchar(500) DEFAULT NULL,
`MatrixStartSeason` varchar(500) DEFAULT NULL,
`MatrixStartMonth` varchar(500) DEFAULT NULL,
`MatrixEndYear` varchar(500) DEFAULT NULL,
`MatrixEndSeason` varchar(500) DEFAULT NULL,
`MatrixEndMonth` varchar(500) DEFAULT NULL,
`Population` varchar(500) DEFAULT NULL,
`LatDeg` varchar(500) DEFAULT NULL,
`LatMin` varchar(500) DEFAULT NULL,
`LatSec` varchar(500) DEFAULT NULL,
`LonDeg` varchar(500) DEFAULT NULL,
`LonMin` varchar(500) DEFAULT NULL,
`LonSec` varchar(500) DEFAULT NULL,
`LatitudeDec` varchar(500) DEFAULT NULL,
`LongitudeDec` varchar(500) DEFAULT NULL,
`Altitude` varchar(500) DEFAULT NULL,
`Country` varchar(500) DEFAULT NULL,
`Continent` varchar(500) DEFAULT NULL,
`MatrixSplit` varchar(500) DEFAULT NULL,
`Observation` varchar(500) DEFAULT NULL,
`MatrixClassOrganized` varchar(500) DEFAULT NULL,
`Matrixnumber` varchar(500) NOT NULL DEFAULT '',
`MatrixClassNumber` varchar(500) DEFAULT NULL,
`Dimension` varchar(500) DEFAULT NULL,
`plantType` varchar(500) DEFAULT NULL,
`matrix` varchar(15000) DEFAULT NULL,
`_ClassNames` varchar(16000) DEFAULT NULL,
`StatusStudy` varchar(500) DEFAULT NULL,
`StatusStudyRef` varchar(500) DEFAULT NULL,
`StatusElsewhere` varchar(500) DEFAULT NULL,
`StatusElsewhereRef` varchar(500) DEFAULT NULL,
PRIMARY KEY (`Matrixnumber`),
和“普通”:
`ID` varchar(100) NOT NULL,
`CommonName` varchar(100) NOT NULL,
`ImageUrl` varchar(200) NOT NULL,
`UploadImgUrl` varchar(100) NOT NULL,
UNIQUE KEY `SpeciesAccepted` (`ID`),
KEY `ID` (`ID`)
我基本上是使用坐标在地图上绘制每条记录,并显示来自“coords”的所有信息——这已经成功实现了。“common”表包含为每个“SpeciesName”(coords.SpeciesName和common.ID)动态创建的新信息,因此我希望显示CommonName,并使用“ImageUrl”和“UploadedImgUrl”以及我以前拥有的数据。我还是MySQL的新手,所以如果我的术语不完美,我道歉 你要找的东西叫做。其基本思想是避免表中存在冗余数据,而只保留引用的单个值(在您的案例中为SpeciesNames) 因此,与包含与
common.CommonName
相同字符串的coords.SpeciesName
不同,您可以将引用存储为coords.SpeciesName\u id
,它存储common.id
。这两个字段的类型均应为INT
,以便进行性能响应,因为它们的比较速度比字符串快得多
要在单个查询中从两个表中提取数据,可以执行以下操作:
SELECT * FROM coords JOIN common ON coords.SpeciesName_id = common.ID
例如,在谷歌上快速搜索就会得到这样的结果
对的另一次搜索将提示您如何使用PHP执行查询。MYSQL的主要问题不是数据库大小或记录数!我见过高达10-12GB的数据库文件。主要问题发生在您想要获取记录时,您可能会面临一次可以处理的查询数量问题!如果您注意执行查询的方式,则不会发生严重问题。5500条记录并不多。我对您的问题/情况并不十分清楚,但我认为您需要多对多关系。相信我5500对于mysql来说非常小:)例如,我现在工作的表大约有700万行。@Peter它每天都在增长,希望确保它能够处理更多的记录,无论它增长到什么大小,考虑到数据的性质。它需要能够扩展,我想为未来投保!如果mysql有数千个数据集,mysql将是垃圾,而且不会像今天这样流行。这是非常小的数据集。对于MySQL来说,表中的数百万条记录不是问题,只要您为您执行的查询设置了合适的索引。根据我从OP的问题中了解到的,它处理的是矩阵,有时需要冗余数据。根据我的理解,OP希望删除冗余的SpeciesName条目。当然,并非总是希望消除所有冗余。