CREATE DEFINER=`root`@`localhost`PROCEDURE`insert_test_data`() BEGIN DECLARE i INTDEFAULT413241; WHILE i DO INSERTINTO test_table (name, value) VALUES (CONCAT('test_name_', i), i); SET i = i + 1; ENDWHILE; END
执行存储过程:
call insert_test_data();
为日期字段赋值,值为随机值:
update test_table t SET t.create_time = ( SELECTDATE_SUB(NOW(), INTERVALFLOOR(RAND() * 1000000) SECOND) WHERE create_time ISNULL )
以上脚本执行完毕后,测试数据插入完毕。
执行分析语句,可以看到查询表完整数据,实际会花费3303毫秒。
explainanalyzeselect * from test_table;
现在新建一张相同字段的测试表:
CREATETABLE m_test_table LIKE test_table;
将表的引擎改为memory:
往新的测试表中插入数据:
INSERTINTO m_test_table SELECT * FROM test_table;
在这一步,可能会报“The table 'm_test_table' is full”这个错误。这是因为系统默认给内存表分配的空间大小是16M,可以通过更新配置的方式,调整这个大小。
select * from information_schema.TABLES ta where1=1 and ta.table_schema notin ( 'information_schema', 'mysql', 'sys', 'performance_schema' ) orderby ta.table_schema,ta.table_name;
查看不同存储引擎占用内存情况
SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, sys.format_bytes(SUM(current_alloc)) AS current_alloc FROM sys.x$memory_global_by_current_bytes GROUPBY SUBSTRING_INDEX(event_name,'/',2) ORDERBYSUM(current_alloc) DESC;