CREATE TABLE table_name (
id INT NOT NULL,
name VARCHAR(255) DEFAULT NULL,
created_at DATETIME DEFAULT NULL
)
PRIMARY KEY (id)
DISTRIBUTED BY HASH (id);
CREATE TABLE `orders` (
`order_id` bigint(20) NOT NULL AUTO_INCREMENT,
`customer_id` int(11) NOT NULL,
`order_date` date NOT NULL,
`total_amount` decimal(10,2) NOT NULL,
`status` varchar(20) DEFAULT 'pending',
`created_at` datetime(0) DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`order_id`),
KEY `idx_customer` (`customer_id`),
KEY `idx_date` (`order_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
StarRocks转换后
sql复制代码
CREATE TABLE orders (
order_id BIGINT NOT NULL,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
PRIMARY KEY (order_id)
DISTRIBUTED BY HASH (order_id);
-- 创建索引
CREATE INDEX idx_customer ON orders(customer_id);
CREATE INDEX idx_date ON orders(order_date);
CREATE TABLE product_reviews (
review_id INT NOT NULL,
product_id INT NOT NULL,
user_id INT NOT NULL,
rating TINYINT NOT NULL,
review_text STRING,
helpful_votes INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
PRIMARY KEY (review_id)
DISTRIBUTED BY HASH (review_id);
-- 创建索引
CREATE INDEX idx_product ON product_reviews(product_id);
CREATE INDEX idx_user ON product_reviews(user_id);
CREATE INDEX idx_rating ON product_reviews(rating);
CREATE INDEX idx_created ON product_reviews(created_at);
⚠️ 注意事项和限制
1. 不支持的功能
❌ AUTO_INCREMENT - 需要手动处理ID生成
❌ ON UPDATE CURRENT_TIMESTAMP - 需要应用层处理
❌ 外键约束 - StarRocks不支持外键
❌ 存储过程和函数 - 需要重写
❌ 触发器 - 不支持触发器
2. 需要手动处理的情况
🔄 自增ID字段
🔄 外键关系
🔄 复杂约束
🔄 存储过程
🔄 自定义函数
3. 性能优化建议
✅ 选择合适的分布键
✅ 创建必要的索引
✅ 考虑分区策略
✅ 优化查询语句
🚀 最佳实践
1. 分布键选择
sql复制代码
-- 推荐:选择查询频繁的字段作为分布键
CREATE TABLE orders (
order_id BIGINT NOT NULL,
customer_id INT NOT NULL,
-- 其他字段...
)
PRIMARY KEY (order_id)
DISTRIBUTED BY HASH (customer_id); -- 按客户ID分布
2. 索引策略
sql复制代码
-- 为经常查询的字段创建索引
CREATE INDEX idx_order_date ON orders(order_date);
CREATE INDEX idx_customer ON orders(customer_id);
CREATE INDEX idx_status ON orders(status);