Mysql 我应该如何选择应该索引的列以减少数据搜索?
我有一个如下的表格,大约有300万行数据,我需要在这个表格中按日期和股票代码进行搜索,但我对这些列是否索引感到困惑。我测试了不同的索引组合,但找不到更好的状态 问题2:Mysql 我应该如何选择应该索引的列以减少数据搜索?,mysql,indexing,mariadb,Mysql,Indexing,Mariadb,我有一个如下的表格,大约有300万行数据,我需要在这个表格中按日期和股票代码进行搜索,但我对这些列是否索引感到困惑。我测试了不同的索引组合,但找不到更好的状态 问题2: 我如何知道应该索引哪一列 索引对插入和更新查询有什么影响 表: CREATE TABLE `_b_price` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `tickerDate` varchar(100) NOT NULL, `ticker` varchar(50) D
- 我如何知道应该索引哪一列
- 索引对插入和更新查询有什么影响
CREATE TABLE `_b_price` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tickerDate` varchar(100) NOT NULL,
`ticker` varchar(50) DEFAULT NULL,
`date` DATE DEFAULT NULL,
`close` int(11) DEFAULT NULL,
`high` int(11) DEFAULT NULL,
`low` int(11) DEFAULT NULL,
`numOfTrades` int(11) DEFAULT NULL,
`open` int(11) DEFAULT NULL,
`value` bigint(20) DEFAULT NULL,
`volume` int(11) DEFAULT NULL,
`vwap` int(11) DEFAULT NULL,
`state` varchar(5) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tickerDate` (`tickerDate`),
KEY `date` (`date`),
KEY `ticker` (`ticker`)
) ENGINE=InnoDB AUTO_INCREMENT=2667983 DEFAULT CHARSET=utf8
人们只能通过查看模式来猜测索引。我们需要查看查询来判断要使用哪些索引。“按日期和股票代码搜索”太模糊 但是,既然我已经处理过这样的表格,我可以给你一些提示:
- 索引的卷可以超过INT的大小
- 价格是不可分割的
- tickerDate不应该是
日期
数据类型吗
- 投掷
,除非你有特殊用途。将id
提升为唯一
主键
- 等等!你每天只允许一排,你有几百万?也许“tickerDate”用词不当
可能应该是主键
。这样就不需要(股票代码,日期)
键(ticker)
- 您可能还需要
——我需要看看你的问题索引(日期)
- 我怀疑任何交易项目都有ascii“ticker”,所以不要使用
CHARSET=utf8
- 规范化标记,替换为(可能)未签名的
(16M限制)MEDIUMINT
- 我想你的意思是让
成为UNIQUE(TickerDate)
。(然后升级到PK,如上所述。)UNIQUE(Ticker,TickerDate)